/*!
 * Valine v1.3.9
 * (c) 2017-2019 xCss
 * Released under the GPL-2.0 License.
 * Last Update: 2019-6-26 21:52:17
 */
!function(e, t) {
    "object" == typeof exports && "object" == typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define([], t) : "object" == typeof exports ? exports.Valine = t() : e.Valine = t()
}(this, function() {
    return function(e) {
        function t(r) {
            if (n[r])
                return n[r].exports;
            var i = n[r] = {
                i: r,
                l: !1,
                exports: {}
            };
            return e[r].call(i.exports, i, i.exports, t),
            i.l = !0,
            i.exports
        }
        var n = {};
        return t.m = e,
        t.c = n,
        t.i = function(e) {
            return e
        }
        ,
        t.d = function(e, n, r) {
            t.o(e, n) || Object.defineProperty(e, n, {
                configurable: !1,
                enumerable: !0,
                get: r
            })
        }
        ,
        t.n = function(e) {
            var n = e && e.__esModule ? function() {
                return e.default
            }
            : function() {
                return e
            }
            ;
            return t.d(n, "a", n),
            n
        }
        ,
        t.o = function(e, t) {
            return Object.prototype.hasOwnProperty.call(e, t)
        }
        ,
        t.p = "",
        t(t.s = 17)
    }([function(e, t, n) {
        var r, i, o;
        i = [e, t],
        r = function(e, t) {
            "use strict";
            function n(e) {
                function t(t) {
                    var n = e.style.width;
                    e.style.width = "0px",
                    e.offsetWidth,
                    e.style.width = n,
                    e.style.overflowY = t
                }
                function n() {
                    if (0 !== e.scrollHeight) {
                        var t = function(e) {
                            for (var t = []; e && e.parentNode && e.parentNode instanceof Element; )
                                e.parentNode.scrollTop && t.push({
                                    node: e.parentNode,
                                    scrollTop: e.parentNode.scrollTop
                                }),
                                e = e.parentNode;
                            return t
                        }(e)
                          , n = document.documentElement && document.documentElement.scrollTop;
                        e.style.height = "",
                        e.style.height = e.scrollHeight + i + "px",
                        s = e.clientWidth,
                        t.forEach(function(e) {
                            e.node.scrollTop = e.scrollTop
                        }),
                        n && (document.documentElement.scrollTop = n)
                    }
                }
                function r() {
                    n();
                    var r = Math.round(parseFloat(e.style.height))
                      , i = window.getComputedStyle(e, null)
                      , o = "content-box" === i.boxSizing ? Math.round(parseFloat(i.height)) : e.offsetHeight;
                    if (o < r ? "hidden" === i.overflowY && (t("scroll"),
                    n(),
                    o = "content-box" === i.boxSizing ? Math.round(parseFloat(window.getComputedStyle(e, null).height)) : e.offsetHeight) : "hidden" !== i.overflowY && (t("hidden"),
                    n(),
                    o = "content-box" === i.boxSizing ? Math.round(parseFloat(window.getComputedStyle(e, null).height)) : e.offsetHeight),
                    l !== o) {
                        l = o;
                        var s = a("autosize:resized");
                        try {
                            e.dispatchEvent(s)
                        } catch (e) {}
                    }
                }
                if (e && e.nodeName && "TEXTAREA" === e.nodeName && !o.has(e)) {
                    var i = null
                      , s = null
                      , l = null
                      , c = function() {
                        e.clientWidth !== s && r()
                    }
                      , d = function(t) {
                        window.removeEventListener("resize", c, !1),
                        e.removeEventListener("input", r, !1),
                        e.removeEventListener("keyup", r, !1),
                        e.removeEventListener("autosize:destroy", d, !1),
                        e.removeEventListener("autosize:update", r, !1),
                        Object.keys(t).forEach(function(n) {
                            e.style[n] = t[n]
                        }),
                        o.delete(e)
                    }
                    .bind(e, {
                        height: e.style.height,
                        resize: e.style.resize,
                        overflowY: e.style.overflowY,
                        overflowX: e.style.overflowX,
                        wordWrap: e.style.wordWrap
                    });
                    e.addEventListener("autosize:destroy", d, !1),
                    "onpropertychange"in e && "oninput"in e && e.addEventListener("keyup", r, !1),
                    window.addEventListener("resize", c, !1),
                    e.addEventListener("input", r, !1),
                    e.addEventListener("autosize:update", r, !1),
                    e.style.overflowX = "hidden",
                    e.style.wordWrap = "break-word",
                    o.set(e, {
                        destroy: d,
                        update: r
                    }),
                    function() {
                        var t = window.getComputedStyle(e, null);
                        "vertical" === t.resize ? e.style.resize = "none" : "both" === t.resize && (e.style.resize = "horizontal"),
                        i = "content-box" === t.boxSizing ? -(parseFloat(t.paddingTop) + parseFloat(t.paddingBottom)) : parseFloat(t.borderTopWidth) + parseFloat(t.borderBottomWidth),
                        isNaN(i) && (i = 0),
                        r()
                    }()
                }
            }
            function r(e) {
                var t = o.get(e);
                t && t.destroy()
            }
            function i(e) {
                var t = o.get(e);
                t && t.update()
            }
            var o = "function" == typeof Map ? new Map : function() {
                var e = []
                  , t = [];
                return {
                    has: function(t) {
                        return e.indexOf(t) > -1
                    },
                    get: function(n) {
                        return t[e.indexOf(n)]
                    },
                    set: function(n, r) {
                        -1 === e.indexOf(n) && (e.push(n),
                        t.push(r))
                    },
                    delete: function(n) {
                        var r = e.indexOf(n);
                        r > -1 && (e.splice(r, 1),
                        t.splice(r, 1))
                    }
                }
            }()
              , a = function(e) {
                return new Event(e,{
                    bubbles: !0
                })
            };
            try {
                new Event("test")
            } catch (e) {
                a = function(e) {
                    var t = document.createEvent("Event");
                    return t.initEvent(e, !0, !1),
                    t
                }
            }
            var s = null;
            "undefined" == typeof window || "function" != typeof window.getComputedStyle ? ((s = function(e) {
                return e
            }
            ).destroy = function(e) {
                return e
            }
            ,
            s.update = function(e) {
                return e
            }
            ) : ((s = function(e, t) {
                return e && Array.prototype.forEach.call(e.length ? e : [e], function(e) {
                    return n(e)
                }),
                e
            }
            ).destroy = function(e) {
                return e && Array.prototype.forEach.call(e.length ? e : [e], r),
                e
            }
            ,
            s.update = function(e) {
                return e && Array.prototype.forEach.call(e.length ? e : [e], i),
                e
            }
            ),
            t.default = s,
            e.exports = t.default
        }
        ,
        void 0 !== (o = "function" == typeof r ? r.apply(t, i) : r) && (e.exports = o)
    }
    , function(e, t, n) {
        "use strict";
        function r(e) {
            return this.init(e),
            this
        }
        function i(e) {
            return new r(e)
        }
        var o = n(9).version
          , a = n(6)
          , s = n(8)
          , l = n(0)
          , c = n(5)
          , d = n(3)
          , u = n(4)
          , p = n(2)
          , f = n(7)
          , h = /^https?\:\/\//
          , v = {
            comment: "",
            nick: "Anonymous",
            mail: "",
            link: "",
            ua: navigator.userAgent,
            url: ""
        }
          , g = {
            "zh-cn": {
                head: {
                    nick: "昵称（必填）",
                    mail: "邮箱（必填）",
                    link: "完整链接"
                },
                tips: {
                    comments: "评论",
                    sofa: "快来做第一个评论的人吧~",
                    busy: "还在提交中，请稍候...",
                    again: "这么简单也能错，也是没谁了."
                },
                ctrl: {
                    reply: "回复",
                    ok: "好的",
                    sure: "确认",
                    cancel: "取消",
                    confirm: "确认",
                    continue: "继续",
                    more: "查看更多...",
                    try: "再试试?",
                    preview: "预览",
                    emoji: "表情"
                },
                error: {
                    99: "初始化失败，请检查init中的`el`元素.",
                    100: "初始化失败，请检查你的AppId和AppKey.",
                    401: "未经授权的操作，请检查你的AppId和AppKey.",
                    403: "访问被api域名白名单拒绝，请检查你的安全域名设置."
                },
                timeago: {
                    seconds: "秒前",
                    minutes: "分钟前",
                    hours: "小时前",
                    days: "天前",
                    now: "刚刚"
                }
            },
            en: {
                head: {
                    nick: "NickName",
                    mail: "E-Mail",
                    link: "Website(http://)"
                },
                tips: {
                    comments: "Comments",
                    sofa: "No comments yet.",
                    busy: "Submit is busy, please wait...",
                    again: "Sorry, this is a wrong calculation."
                },
                ctrl: {
                    reply: "Reply",
                    ok: "Ok",
                    sure: "Sure",
                    cancel: "Cancel",
                    confirm: "Confirm",
                    continue: "Continue",
                    more: "Load More...",
                    try: "Once More?",
                    preview: "Preview",
                    emoji: "Emoji"
                },
                error: {
                    99: "Initialization failed, Please check the `el` element in the init method.",
                    100: "Initialization failed, Please check your appId and appKey.",
                    401: "Unauthorized operation, Please check your appId and appKey.",
                    403: "Access denied by api domain white list, Please check your security domain."
                },
                timeago: {
                    seconds: "seconds ago",
                    minutes: "minutes ago",
                    hours: "hours ago",
                    days: "days ago",
                    now: "just now"
                }
            }
        }
          , m = {
            cdn: "https://gravatar.loli.net/avatar/",
            ds: ["mp", "identicon", "monsterid", "wavatar", "robohash", "retro", ""],
            params: "",
            hide: !1
        }
          , b = ["nick", "mail", "link"]
          , x = Storage && localStorage && localStorage instanceof Storage && localStorage
          , y = location.pathname.replace(/index\.html?$/, "");
        r.prototype.init = function(e) {
            var t = this;
            if (t.config = e,
            "undefined" != typeof document)
                return "undefined" == typeof AV ? u.dynamicLoadSource("script", {
                    src: "//cdn.jsdelivr.net/npm/leancloud-storage/dist/av-min.js"
                }, function() {
                    "undefined" != typeof AV ? e && t._init() : setTimeout(function() {
                        t.init(e)
                    }, 300)
                }) : e && t._init(),
                u.dynamicLoadSource("script", {
                    src: "//js.fundebug.cn/fundebug.1.9.0.min.js",
                    apikey: "2c7e5b30c7cf402cb7fb35d14b62e7f778babbb70d054160af750065a180fdcd",
                    async: !0
                }),
                t;
            console
        }
        ,
        r.prototype._init = function() {
            var e = this;
            try {
                var t = e.config
                  , n = t.lang
                  , r = t.langMode
                  , i = t.avatar
                  , a = t.avatarForce
                  , l = t.avatar_cdn
                  , c = t.notify
                  , d = t.verify
                  , p = t.visitor
                  , x = t.pageSize
                  , w = t.recordIP
                  , _ = t.clazzName
                  , A = void 0 === _ ? "Comment" : _;
                e.config.clazzName = A;
                var O = m.ds
                  , S = a ? "&q=" + Math.random().toString(32).substring(2) : "";
                n && r && e.installLocale(n, r),
                e.locale = e.locale || g[n || "zh-cn"],
                e.notify = c || !1,
                e.verify = d || !1,
                m.params = "?d=" + (O.indexOf(i) > -1 ? i : "mp") + "&v=" + o + S,
                m.hide = "hide" === i,
                m.cdn = h.test(l) ? l : m.cdn,
                y = e.config.path || y;
                var $ = Number(x || 10);
                if (e.config.pageSize = isNaN($) ? 10 : $ < 1 ? 10 : $,
                s.setOptions({
                    renderer: new s.Renderer,
                    highlight: !1 === e.config.highlight ? null : f,
                    gfm: !0,
                    tables: !0,
                    breaks: !0,
                    pedantic: !1,
                    sanitize: !1,
                    smartLists: !0,
                    smartypants: !0
                }),
                w) {
                    var E = u.create("script", "src", "//api.ip.sb/jsonip?callback=getIP")
                      , L = document.getElementsByTagName("script")[0];
                    L.parentNode.insertBefore(E, L),
                    window.getIP = function(e) {
                        v.ip = e.ip
                    }
                }
                var M = e.config.app_id || e.config.appId
                  , C = e.config.app_key || e.config.appKey;
                if (!M || !C)
                    throw 99;
                var z, T = "https://";
                if (!e.config.serverURLs)
                    switch (M.slice(-9)) {
                    case "-9Nh9j0Va":
                        T += "tab.";
                        break;
                    case "-MdYXbMMI":
                        T += "us."
                    }
                z = e.config.serverURLs || T + "avoscloud.com",
                M !== AV._config.applicationId && C !== AV._config.applicationKey && AV.init({
                    appId: M,
                    appKey: C,
                    serverURLs: z
                });
                var R = u.findAll(document, ".valine-comment-count");
                u.each(R, function(t, n) {
                    if (n) {
                        var r = u.attr(n, "data-xid");
                        r && e.Q(r).count().then(function(e) {
                            n.innerText = e
                        }).catch(function(e) {
                            n.innerText = 0
                        })
                    }
                }),
                p && k.add(AV.Object.extend("Counter"));
                var j = e.config.el || null
                  , B = u.findAll(document, j);
                if (!(j = j instanceof HTMLElement ? j : B[B.length - 1] || null))
                    return;
                e.el = j,
                e.el.classList.add("v"),
                m.hide && e.el.classList.add("hide-avatar"),
                e.config.meta = (e.config.guest_info || e.config.meta || b).filter(function(e) {
                    return b.indexOf(e) > -1
                });
                var P = (0 == e.config.meta.length ? b : e.config.meta).map(function(t) {
                    var n = "mail" == t ? "email" : "text";
                    return b.indexOf(t) > -1 ? '<input name="' + t + '" placeholder="' + e.locale.head[t] + '" class="v' + t + ' vinput" type="' + n + '">' : ""
                });
                e.placeholder = e.config.placeholder || "Just Go Go",
                e.el.innerHTML = '<div class="vwrap"><div class="vheader item' + P.length + '">' + P.join("") + '</div><div class="vedit"><textarea id="veditor" class="veditor vinput" placeholder="' + e.placeholder + '"></textarea><div class="vctrl"><span class="vemoji-btn">' + e.locale.ctrl.emoji + '</span> | <span class="vpreview-btn">' + e.locale.ctrl.preview + '</span></div><div class="vemojis" style="display:none;"></div><div class="vinput vpreview" style="display:none;"></div></div><div class="vcontrol"><div class="col col-20" title="Markdown is supported"><a href="https://segmentfault.com/markdown" target="_blank"><svg class="markdown" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M14.85 3H1.15C.52 3 0 3.52 0 4.15v7.69C0 12.48.52 13 1.15 13h13.69c.64 0 1.15-.52 1.15-1.15v-7.7C16 3.52 15.48 3 14.85 3zM9 11H7V8L5.5 9.92 4 8v3H2V5h2l1.5 2L7 5h2v6zm2.99.5L9.5 8H11V5h2v3h1.5l-2.51 3.5z"></path></svg></a></div><div class="col col-80 text-right"><button type="button" title="Cmd|Ctrl+Enter" class="vsubmit vbtn">' + e.locale.ctrl.reply + '</button></div></div><div style="display:none;" class="vmark"></div></div><div class="vinfo" style="display:none;"><div class="vcount col"></div></div><div class="vlist"></div><div class="vempty" style="display:none;"></div><div class="vpage txt-center"></div><div class="info"><div class="power txt-right">Powered By <a href="https://valine.js.org" target="_blank">Valine</a><br>' + o + "</div></div>";
                var U = u.find(e.el, ".vempty");
                e.nodata = {
                    show: function(t) {
                        return U.innerHTML = t || e.locale.tips.sofa,
                        u.attr(U, "style", "display:block;"),
                        e
                    },
                    hide: function() {
                        return u.attr(U, "style", "display:none;"),
                        e
                    }
                };
                var I = u.create("div", "class", "vloading")
                  , N = u.find(e.el, ".vlist");
                e.loading = {
                    show: function(t) {
                        var n = u.findAll(N, ".vcard");
                        return t ? N.insertBefore(I, n[0]) : N.appendChild(I),
                        e.nodata.hide(),
                        e
                    },
                    hide: function() {
                        var t = u.find(N, ".vloading");
                        return t && u.remove(t),
                        0 === u.findAll(N, ".vcard").length && e.nodata.show(),
                        e
                    }
                };
                var Q = u.find(e.el, ".vmark");
                e.alert = {
                    show: function(t) {
                        Q.innerHTML = '<div class="valert txt-center"><div class="vtext">' + (t && t.text || 1) + '</div><div class="vbtns"></div></div>';
                        var n = u.find(Q, ".vbtns")
                          , r = '<button class="vcancel vbtn">' + (t && t.ctxt || e.locale.ctrl.cancel) + "</button>"
                          , i = '<button class="vsure vbtn">' + (t && t.otxt || e.locale.ctrl.sure) + "</button>";
                        if (n.innerHTML = "" + r + (t && t.type && i),
                        u.on("click", u.find(Q, ".vcancel"), function(t) {
                            e.alert.hide()
                        }),
                        u.attr(Q, "style", "display:block;"),
                        t && t.type) {
                            var o = u.find(Q, ".vsure");
                            u.on("click", o, function(n) {
                                e.alert.hide(),
                                t.cb && t.cb()
                            })
                        }
                        return e
                    },
                    hide: function() {
                        return u.attr(Q, "style", "display:none;"),
                        e
                    }
                },
                e.bind()
            } catch (t) {
                e.ErrorHandler(t)
            }
        }
        ;
        var w = function(e, t) {
            var n = new e
              , r = new AV.ACL;
            r.setPublicReadAccess(!0),
            r.setPublicWriteAccess(!0),
            n.setACL(r),
            n.set("url", t.url),
            n.set("xid", t.xid),
            n.set("title", t.title),
            n.set("time", 1),
            n.save().then(function(e) {
                u.find(t.el, ".leancloud-visitors-count").innerText = 1
            }).catch(function(e) {})
        }
          , k = {
            add: function(e) {
                var t = u.findAll(document, ".leancloud_visitors,.leancloud-visitors");
                if (t.length) {
                    var n = t[0]
                      , r = u.attr(n, "id")
                      , i = u.attr(n, "data-flag-title")
                      , o = encodeURI(r)
                      , a = {
                        el: n,
                        url: r,
                        xid: o,
                        title: i
                    };
                    if (decodeURI(r) === decodeURI(y)) {
                        var s = new AV.Query(e);
                        s.equalTo("url", r),
                        s.find().then(function(t) {
                            if (t.length > 0) {
                                var r = t[0];
                                r.increment("time"),
                                r.save().then(function(e) {
                                    u.find(n, ".leancloud-visitors-count").innerText = e.get("time")
                                }).catch(function(e) {})
                            } else
                                w(e, a)
                        }).catch(function(t) {
                            101 == t.code && w(e, a)
                        })
                    } else
                        k.show(e, t)
                }
            },
            show: function(e, t) {
                u.each(t, function(e, t) {
                    var n = u.find(t, ".leancloud-visitors-count");
                    n && (n.innerText = 0)
                });
                var n = [];
                for (var r in t)
                    t.hasOwnProperty(r) && n.push(u.attr(t[r], "id"));
                if (n.length) {
                    var i = new AV.Query(e);
                    i.containedIn("url", n),
                    i.find().then(function(e) {
                        e.length > 0 && u.each(e, function(e, t) {
                            var n = t.get("url")
                              , r = t.get("time")
                              , i = u.findAll(document, '.leancloud_visitors[id="' + n + '"],.leancloud-visitors[id="' + n + '"]');
                            u.each(i, function(e, t) {
                                var n = u.find(t, ".leancloud-visitors-count");
                                n && (n.innerText = r)
                            })
                        })
                    }).catch(function(e) {})
                }
            }
        };
        r.prototype.Q = function(e) {
            var t = this;
            if (1 == arguments.length) {
                var n = new AV.Query(t.config.clazzName);
                n.doesNotExist("rid");
                var r = new AV.Query(t.config.clazzName);
                r.equalTo("rid", "");
                var i = AV.Query.or(n, r);
                return "*" === e ? i.exists("url") : i.equalTo("url", decodeURI(e)),
                i.addDescending("createdAt"),
                i.addDescending("insertedAt"),
                i
            }
            var o = JSON.stringify(arguments[1]).replace(/(\[|\])/g, "")
              , a = "select * from " + t.config.clazzName + " where rid in (" + o + ") order by -createdAt,-createdAt";
            return AV.Query.doCloudQuery(a)
        }
        ,
        r.prototype.ErrorHandler = function(e) {
            var t = this;
            if (t.el && t.loading.hide().nodata.hide(),
            "[object Error]" === {}.toString.call(e)) {
                var n = e.code || ""
                  , r = t.locale.error[n] || e.message || e.error || "";
                101 == n ? t.nodata.show() : t.el && t.nodata.show('<pre style="text-align:left;">Code ' + n + ": " + r + "</pre>") || console
            } else
                t.el && t.nodata.show('<pre style="text-align:left;">' + JSON.stringify(e) + "</pre>") || console
        }
        ,
        r.prototype.installLocale = function(e, t) {
            return t = t || {},
            e && (g[e] = t,
            this.locale = g[e] || g["zh-cn"]),
            this
        }
        ,
        r.prototype.setPath = function(e) {
            return y = e || y,
            this
        }
        ,
        r.prototype.bind = function(e) {
            var t = this
              , n = u.find(t.el, ".vemojis")
              , r = u.find(t.el, ".vpreview")
              , i = u.find(t.el, ".vemoji-btn")
              , o = u.find(t.el, ".vpreview-btn")
              , f = u.find(t.el, ".veditor")
              , h = p.data;
            for (var g in h)
                h.hasOwnProperty(g) && function(e, t) {
                    var r = u.create("i", {
                        name: e,
                        title: e
                    });
                    r.innerHTML = t,
                    n.appendChild(r),
                    u.on("click", r, function(e) {
                        E(f, t),
                        w(f)
                    })
                }(g, h[g]);
            t.emoji = {
                show: function() {
                    return t.preview.hide(),
                    u.attr(i, "v", 1),
                    u.removeAttr(o, "v"),
                    u.attr(n, "style", "display:block"),
                    t.emoji
                },
                hide: function() {
                    return u.removeAttr(i, "v"),
                    u.attr(n, "style", "display:hide"),
                    t.emoji
                }
            },
            t.preview = {
                show: function() {
                    return v.comment && (t.emoji.hide(),
                    u.attr(o, "v", 1),
                    u.removeAttr(i, "v"),
                    r.innerHTML = v.comment,
                    u.attr(r, "style", "display:block"),
                    C()),
                    t.preview
                },
                hide: function() {
                    return u.removeAttr(o, "v"),
                    u.attr(r, "style", "display:none"),
                    t.preview
                },
                empty: function() {
                    return r.innerHtml = "",
                    t.preview
                }
            };
            var b = function(e) {
                var t = u.create("div");
                t.insertAdjacentHTML("afterbegin", e);
                var n = u.findAll(t, "*")
                  , r = ["INPUT", "STYLE", "SCRIPT", "IFRAME", "FRAME", "AUDIO", "VIDEO", "EMBED", "META", "TITLE", "LINK"];
                return u.each(n, function(e, t) {
                    1 === t.nodeType && (r.indexOf(t.nodeName) > -1 && ("INPUT" === t.nodeName && "checkbox" === u.attr(t, "type") ? u.attr(t, "disabled", "disabled") : u.remove(t)),
                    "A" === t.nodeName && function(e, t) {
                        var n = u.attr(e, t);
                        n && u.attr(e, t, n.replace(/(javascript|eval)/gi, ""))
                    }(t, "href"),
                    u.clearAttr(t))
                }),
                t.innerHTML
            }
              , w = function(e) {
                var t = e.value || "";
                t = p.parse(t),
                e.value = t;
                var n = b(s(t));
                v.comment = n,
                r.innerHTML = n,
                t ? l(e) : l.destroy(e)
            };
            u.on("click", i, function(e) {
                u.attr(i, "v") ? t.emoji.hide() : t.emoji.show()
            }),
            u.on("click", o, function(e) {
                u.attr(o, "v") ? t.preview.hide() : t.preview.show()
            });
            for (var k = t.config.meta, _ = {}, A = {
                veditor: "comment"
            }, O = 0, S = k.length; O < S; O++)
                A["v" + k[O]] = k[O];
            for (var $ in A)
                A.hasOwnProperty($) && function() {
                    var e = A[$]
                      , n = u.find(t.el, "." + $);
                    _[e] = n,
                    n && u.on("input change blur", n, function(t) {
                        "comment" === e ? w(n) : v[e] = u.escape(n.value.replace(/(^\s*)|(\s*$)/g, ""))
                    })
                }();
            var E = function(e, t) {
                if (document.selection)
                    e.focus(),
                    document.selection.createRange().text = t,
                    e.focus();
                else if (e.selectionStart || "0" == e.selectionStart) {
                    var n = e.selectionStart
                      , r = e.selectionEnd
                      , i = e.scrollTop;
                    e.value = e.value.substring(0, n) + t + e.value.substring(r, e.value.length),
                    e.focus(),
                    e.selectionStart = n + t.length,
                    e.selectionEnd = n + t.length,
                    e.scrollTop = i
                } else
                    e.focus(),
                    e.value += t
            }
              , L = function(e) {
                var n = u.find(t.el, ".vh[rootid='" + e + "']")
                  , r = u.find(n, ".vquote");
                return r || (r = u.create("div", "class", "vquote"),
                n.appendChild(r)),
                r
            };
            t.Q(y).count().then(function(e) {
                e > 0 ? (u.attr(u.find(t.el, ".vinfo"), "style", "display:block;"),
                u.find(t.el, ".vcount").innerHTML = '<span class="vnum">' + e + "</span> " + t.locale.tips.comments,
                function e() {
                    var n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 1
                      , r = t.config.pageSize
                      , i = Number(u.find(t.el, ".vnum").innerText);
                    t.loading.show();
                    var o = t.Q(y);
                    o.limit(r),
                    o.skip((n - 1) * r),
                    o.find().then(function(o) {
                        for (var a = o.length, s = [], l = 0; l < a; l++) {
                            var c = o[l];
                            s.push(c.id),
                            M(c, u.find(t.el, ".vlist"), !0)
                        }
                        t.Q(y, s).then(function(e) {
                            for (var t = e && e.results || [], n = 0; n < t.length; n++) {
                                var r = t[n];
                                M(r, L(r.get("rid")))
                            }
                        });
                        var d = u.find(t.el, ".vpage");
                        d.innerHTML = r * n < i ? '<button type="button" class="vmore vbtn">' + t.locale.ctrl.more + "</button>" : "";
                        var p = u.find(d, ".vmore");
                        p && u.on("click", p, function(t) {
                            d.innerHTML = "",
                            e(++n)
                        }),
                        t.loading.hide()
                    }).catch(function(e) {
                        t.loading.hide().ErrorHandler(e)
                    })
                }()) : t.loading.hide()
            }).catch(function(e) {
                t.ErrorHandler(e)
            });
            var M = function(e, n, r) {
                var i = u.create("div", {
                    class: "vcard",
                    id: e.id
                })
                  , o = m.hide ? "" : '<img class="vimg" src="' + (m.cdn + a(e.get("mail")) + m.params) + '">'
                  , s = e.get("ua") || ""
                  , l = "";
                s && (l = '<span class="vsys">' + (s = d(s)).browser + " " + s.version + '</span> <span class="vsys">' + s.os + " " + s.osVersion + "</span>"),
                "*" === y && (l = '<a href="' + e.get("url") + '" class="vsys">' + e.get("url") + "</a>");
                var p, f = e.get("link") || "";
                p = f ? '<a class="vnick" rel="nofollow" href="' + f + '" target="_blank" >' + e.get("nick") + "</a>" : '<span class="vnick">' + e.get("nick") + "</span>",
                i.innerHTML = o + '\n            <div class="vh" rootid=' + (e.get("rid") || e.id) + '>\n                <div class="vhead">' + p + " " + l + '</div>\n                <div class="vmeta">\n                    <span class="vtime">' + c(e.get("insertedAt") || e.createdAt, t.locale) + '</span>\n                    <span class="vat">' + t.locale.ctrl.reply + '</span>\n                </div>\n                <div class="vcontent">\n                    ' + b(e.get("comment")) + "\n                </div>\n            </div>";
                for (var h = u.find(i, ".vat"), v = u.findAll(i, "a"), g = 0, x = v.length; g < x; g++) {
                    var w = v[g];
                    w && -1 == (u.attr(w, "class") || "").indexOf("at") && u.attr(w, {
                        target: "_blank",
                        rel: "nofollow"
                    })
                }
                var k = u.findAll(n, ".vcard");
                r ? n.appendChild(i) : n.insertBefore(i, k[0]);
                var _ = u.find(i, ".vcontent");
                _ && z(_),
                h && R(h, e),
                C()
            }
              , C = function() {
                setTimeout(function() {
                    try {
                        "undefined" != typeof MathJax && MathJax.Hub.Queue(["Typeset", MathJax.Hub]),
                        "undefined" != typeof hljs && (u.each(u.findAll("pre code"), function(e, t) {
                            hljs.highlightBlock(t)
                        }),
                        u.each(u.findAll("code.hljs"), function(e, t) {
                            hljs.lineNumbersBlock(t)
                        }))
                    } catch (e) {}
                }, 200)
            }
              , z = function(e) {
                setTimeout(function() {
                    e.offsetHeight > 180 && (e.classList.add("expand"),
                    u.on("click", e, function(t) {
                        u.attr(e, "class", "vcontent")
                    }))
                })
            }
              , T = {}
              , R = function(e, t) {
                u.on("click", e, function(e) {
                    var n = "@" + u.escape(t.get("nick"));
                    T = {
                        at: u.escape(n) + " ",
                        rid: t.get("rid") || t.id,
                        pid: t.id,
                        rmail: t.get("mail")
                    },
                    u.attr(_.comment, "placeholder", n),
                    _.comment.focus()
                })
            };
            !function() {
                var e = x && x.ValineCache;
                if (e) {
                    e = JSON.parse(e);
                    var n = k;
                    for (var r in n) {
                        var i = n[r];
                        u.find(t.el, ".v" + i).value = u.unescape(e[i]),
                        v[i] = e[i]
                    }
                }
            }();
            var j = u.find(t.el, ".vsubmit")
              , B = function(e) {
                return u.attr(j, "disabled") ? void t.alert.show({
                    type: 0,
                    text: t.locale.tips.busy + 'ヾ(๑╹◡╹)ﾉ"',
                    ctxt: t.locale.ctrl.ok
                }) : "" == v.comment ? void _.comment.focus() : "" == v.nick ? void _.nick.focus() : "" == v.mail ? void _.mail.focus() : (v.nick = v.nick || "Anonymous",
                void (t.notify || t.verify ? I(U) : U()))
            }
              , P = function() {
                var e = new AV.ACL;
                return e.setPublicReadAccess(!0),
                e.setPublicWriteAccess(!1),
                e
            }
              , U = function() {
                u.attr(j, "disabled", !0),
                t.loading.show(!0);
                var e = new (AV.Object.extend(t.config.clazzName || "Comment"))
                  , n = "*" === y ? location.pathname.replace(/index\.html?$/, "") : y;
                if (v.url = decodeURI(n),
                v.insertedAt = new Date,
                T.rid) {
                    var r = T.pid || T.rid;
                    e.set("rid", T.rid),
                    e.set("pid", r),
                    v.comment = v.comment.replace("<p>", '<p><a class="at" href="#' + r + '">' + T.at + "</a> , ")
                }
                for (var i in v)
                    if (v.hasOwnProperty(i)) {
                        var o = v[i];
                        e.set(i, o)
                    }
                e.setACL(P()),
                e.save().then(function(e) {
                    "Anonymous" != v.nick && x && x.setItem("ValineCache", JSON.stringify({
                        nick: v.nick,
                        link: v.link,
                        mail: v.mail
                    }));
                    var n = u.find(t.el, ".vnum")
                      , r = 1;
                    try {
                        if (T.rid) {
                            var i = u.find(t.el, '.vquote[rid="' + T.rid + '"]') || L(T.rid);
                            M(e, i, !0)
                        } else
                            n ? (r = Number(n.innerText) + 1,
                            n.innerText = r) : u.find(t.el, ".vcount").innerHTML = '<span class="num">1</span> ' + t.locale.tips.comments,
                            M(e, u.find(t.el, ".vlist"));
                        v.mail && N({
                            username: v.nick,
                            mail: v.mail
                        }),
                        T.at && T.rmail && t.notify && Q({
                            username: T.at.replace("@", ""),
                            mail: T.rmail
                        }),
                        u.removeAttr(j, "disabled"),
                        t.loading.hide(),
                        v.comment = "",
                        _.comment.value = "",
                        w(_.comment),
                        u.attr(_.comment, "placeholder", t.placeholder),
                        T = {},
                        t.preview.empty().hide()
                    } catch (e) {
                        t.ErrorHandler(e)
                    }
                }).catch(function(e) {
                    t.ErrorHandler(e)
                })
            }
              , I = function e(n) {
                var r = Math.floor(10 * Math.random() + 1)
                  , i = Math.floor(10 * Math.random() + 1)
                  , o = Math.floor(10 * Math.random() + 1)
                  , a = ["+", "-", "x"]
                  , s = "" + r + a[Math.floor(3 * Math.random())] + i + a[Math.floor(3 * Math.random())] + o
                  , l = s + " = <input class='vcode vinput' >";
                t.alert.show({
                    type: 1,
                    text: l,
                    ctxt: t.locale.ctrl.cancel,
                    otxt: t.locale.ctrl.ok,
                    cb: function() {
                        var r = +u.find(t.el, ".vcode").value;
                        new Function("return " + s.replace(/x/g, "*"))() === r ? n && n() : t.alert.show({
                            type: 1,
                            text: "(T＿T)" + t.locale.tips.again,
                            ctxt: t.locale.ctrl.cancel,
                            otxt: t.locale.ctrl.try,
                            cb: function() {
                                e(n)
                            }
                        })
                    }
                })
            }
              , N = function(e) {
                var t = new AV.User;
                return t.setUsername(e.username),
                t.setPassword(e.mail),
                t.setEmail(e.mail),
                t.setACL(P()),
                t.signUp()
            }
              , Q = function e(n) {
                AV.User.requestPasswordReset(n.mail).then(function(e) {}).catch(function(r) {
                    1 == r.code ? t.alert.show({
                        type: 0,
                        text: "ヾ(ｏ･ω･)ﾉ At太频繁啦，提醒功能暂时宕机。<br>" + r.error,
                        ctxt: t.locale.ctrl.ok
                    }) : N(n).then(function(t) {
                        e(n)
                    }).catch(function(e) {})
                })
            };
            u.on("click", j, B),
            u.on("keydown", document, function(e) {
                var t = (e = event || e).keyCode || e.which || e.charCode;
                (e.ctrlKey || e.metaKey) && 13 === t && B(),
                9 === t && "veditor" == (document.activeElement.id || "") && (e.preventDefault(),
                E(f, "    "))
            })
        }
        ,
        e.exports = i,
        e.exports.default = i
    }
    , function(e, t, n) {
        "use strict";
        var r = {
            data: n(11),
            parse: function(e) {
                return String(e).replace(/:(.+?):/g, function(e, t) {
                    return r.data[t] || e
                })
            }
        };
        e.exports = r
    }
    , function(e, t, n) {
        "use strict";
        e.exports = function(e) {
            return new function(e) {
                var t = this
                  , n = {
                    Trident: e.indexOf("Trident") > -1 || e.indexOf("NET CLR") > -1,
                    Presto: e.indexOf("Presto") > -1,
                    WebKit: e.indexOf("AppleWebKit") > -1,
                    Gecko: e.indexOf("Gecko/") > -1,
                    Safari: e.indexOf("Safari") > -1,
                    Chrome: e.indexOf("Chrome") > -1 || e.indexOf("CriOS") > -1,
                    IE: e.indexOf("MSIE") > -1 || e.indexOf("Trident") > -1,
                    Edge: e.indexOf("Edge") > -1,
                    Firefox: e.indexOf("Firefox") > -1 || e.indexOf("FxiOS") > -1,
                    "Firefox Focus": e.indexOf("Focus") > -1,
                    Chromium: e.indexOf("Chromium") > -1,
                    Opera: e.indexOf("Opera") > -1 || e.indexOf("OPR") > -1,
                    Vivaldi: e.indexOf("Vivaldi") > -1,
                    Yandex: e.indexOf("YaBrowser") > -1,
                    Kindle: e.indexOf("Kindle") > -1 || e.indexOf("Silk/") > -1,
                    360: e.indexOf("360EE") > -1 || e.indexOf("360SE") > -1,
                    UC: e.indexOf("UC") > -1 || e.indexOf(" UBrowser") > -1,
                    QQBrowser: e.indexOf("QQBrowser") > -1,
                    QQ: e.indexOf("QQ/") > -1,
                    Baidu: e.indexOf("Baidu") > -1 || e.indexOf("BIDUBrowser") > -1,
                    Maxthon: e.indexOf("Maxthon") > -1,
                    Sogou: e.indexOf("MetaSr") > -1 || e.indexOf("Sogou") > -1,
                    LBBROWSER: e.indexOf("LBBROWSER") > -1,
                    "2345Explorer": e.indexOf("2345Explorer") > -1,
                    TheWorld: e.indexOf("TheWorld") > -1,
                    XiaoMi: e.indexOf("MiuiBrowser") > -1,
                    Quark: e.indexOf("Quark") > -1,
                    Qiyu: e.indexOf("Qiyu") > -1,
                    Wechat: e.indexOf("MicroMessenger") > -1,
                    Taobao: e.indexOf("AliApp(TB") > -1,
                    Alipay: e.indexOf("AliApp(AP") > -1,
                    Weibo: e.indexOf("Weibo") > -1,
                    Douban: e.indexOf("com.douban.frodo") > -1,
                    Suning: e.indexOf("SNEBUY-APP") > -1,
                    iQiYi: e.indexOf("IqiyiApp") > -1,
                    Windows: e.indexOf("Windows") > -1,
                    Linux: e.indexOf("Linux") > -1 || e.indexOf("X11") > -1,
                    "Mac OS": e.indexOf("Macintosh") > -1,
                    Android: e.indexOf("Android") > -1 || e.indexOf("Adr") > -1,
                    Ubuntu: e.indexOf("Ubuntu") > -1,
                    FreeBSD: e.indexOf("FreeBSD") > -1,
                    Debian: e.indexOf("Debian") > -1,
                    "Windows Phone": e.indexOf("IEMobile") > -1 || e.indexOf("Windows Phone") > -1,
                    BlackBerry: e.indexOf("BlackBerry") > -1 || e.indexOf("RIM") > -1,
                    MeeGo: e.indexOf("MeeGo") > -1,
                    Symbian: e.indexOf("Symbian") > -1,
                    iOS: e.indexOf("like Mac OS X") > -1,
                    "Chrome OS": e.indexOf("CrOS") > -1,
                    WebOS: e.indexOf("hpwOS") > -1,
                    Mobile: e.indexOf("Mobi") > -1 || e.indexOf("iPh") > -1 || e.indexOf("480") > -1,
                    Tablet: e.indexOf("Tablet") > -1 || e.indexOf("Pad") > -1 || e.indexOf("Nexus 7") > -1
                };
                n.Mobile && (n.Mobile = !(e.indexOf("iPad") > -1));
                var r = {
                    engine: ["WebKit", "Trident", "Gecko", "Presto"],
                    browser: ["Safari", "Chrome", "Edge", "IE", "Firefox", "Firefox Focus", "Chromium", "Opera", "Vivaldi", "Yandex", "Kindle", "360", "UC", "QQBrowser", "QQ", "Baidu", "Maxthon", "Sogou", "LBBROWSER", "2345Explorer", "TheWorld", "XiaoMi", "Quark", "Qiyu", "Wechat", "Taobao", "Alipay", "Weibo", "Douban", "Suning", "iQiYi"],
                    os: ["Windows", "Linux", "Mac OS", "Android", "Ubuntu", "FreeBSD", "Debian", "iOS", "Windows Phone", "BlackBerry", "MeeGo", "Symbian", "Chrome OS", "WebOS"],
                    device: ["Mobile", "Tablet"]
                };
                for (var i in t.device = "PC",
                r)
                    for (var o = 0; o < r[i].length; o++) {
                        var a = r[i][o];
                        n[a] && (t[i] = a)
                    }
                var s = {
                    Windows: function() {
                        var t = e.replace(/^.*Windows NT ([\d.]+);.*$/, "$1");
                        return {
                            6.4: "10",
                            6.3: "8.1",
                            6.2: "8",
                            6.1: "7",
                            "6.0": "Vista",
                            5.2: "XP",
                            5.1: "XP",
                            "5.0": "2000"
                        }[t] || t
                    },
                    Android: function() {
                        return e.replace(/^.*Android ([\d.]+);.*$/, "$1")
                    },
                    iOS: function() {
                        return e.replace(/^.*OS ([\d_]+) like.*$/, "$1").replace(/_/g, ".")
                    },
                    Debian: function() {
                        return e.replace(/^.*Debian\/([\d.]+).*$/, "$1")
                    },
                    "Windows Phone": function() {
                        return e.replace(/^.*Windows Phone( OS)? ([\d.]+);.*$/, "$2")
                    },
                    "Mac OS": function() {
                        return e.replace(/^.*Mac OS X ([\d_]+).*$/, "$1").replace(/_/g, ".")
                    },
                    WebOS: function() {
                        return e.replace(/^.*hpwOS\/([\d.]+);.*$/, "$1")
                    }
                };
                t.osVersion = "",
                s[t.os] && (t.osVersion = s[t.os](),
                t.osVersion == e && (t.osVersion = ""));
                var l = {
                    Safari: function() {
                        return e.replace(/^.*Version\/([\d.]+).*$/, "$1")
                    },
                    Chrome: function() {
                        return e.replace(/^.*Chrome\/([\d.]+).*$/, "$1").replace(/^.*CriOS\/([\d.]+).*$/, "$1")
                    },
                    IE: function() {
                        return e.replace(/^.*MSIE ([\d.]+).*$/, "$1").replace(/^.*rv:([\d.]+).*$/, "$1")
                    },
                    Edge: function() {
                        return e.replace(/^.*Edge\/([\d.]+).*$/, "$1")
                    },
                    Firefox: function() {
                        return e.replace(/^.*Firefox\/([\d.]+).*$/, "$1").replace(/^.*FxiOS\/([\d.]+).*$/, "$1")
                    },
                    "Firefox Focus": function() {
                        return e.replace(/^.*Focus\/([\d.]+).*$/, "$1")
                    },
                    Chromium: function() {
                        return e.replace(/^.*Chromium\/([\d.]+).*$/, "$1")
                    },
                    Opera: function() {
                        return e.replace(/^.*Opera\/([\d.]+).*$/, "$1").replace(/^.*OPR\/([\d.]+).*$/, "$1")
                    },
                    Vivaldi: function() {
                        return e.replace(/^.*Vivaldi\/([\d.]+).*$/, "$1")
                    },
                    Yandex: function() {
                        return e.replace(/^.*YaBrowser\/([\d.]+).*$/, "$1")
                    },
                    Kindle: function() {
                        return e.replace(/^.*Version\/([\d.]+).*$/, "$1")
                    },
                    Maxthon: function() {
                        return e.replace(/^.*Maxthon\/([\d.]+).*$/, "$1")
                    },
                    QQBrowser: function() {
                        return e.replace(/^.*QQBrowser\/([\d.]+).*$/, "$1")
                    },
                    QQ: function() {
                        return e.replace(/^.*QQ\/([\d.]+).*$/, "$1")
                    },
                    Baidu: function() {
                        return e.replace(/^.*BIDUBrowser[\s\/]([\d.]+).*$/, "$1")
                    },
                    UC: function() {
                        return e.replace(/^.*UC?Browser\/([\d.]+).*$/, "$1")
                    },
                    Sogou: function() {
                        return e.replace(/^.*SE ([\d.X]+).*$/, "$1").replace(/^.*SogouMobileBrowser\/([\d.]+).*$/, "$1")
                    },
                    "2345Explorer": function() {
                        return e.replace(/^.*2345Explorer\/([\d.]+).*$/, "$1")
                    },
                    TheWorld: function() {
                        return e.replace(/^.*TheWorld ([\d.]+).*$/, "$1")
                    },
                    XiaoMi: function() {
                        return e.replace(/^.*MiuiBrowser\/([\d.]+).*$/, "$1")
                    },
                    Quark: function() {
                        return e.replace(/^.*Quark\/([\d.]+).*$/, "$1")
                    },
                    Qiyu: function() {
                        return e.replace(/^.*Qiyu\/([\d.]+).*$/, "$1")
                    },
                    Wechat: function() {
                        return e.replace(/^.*MicroMessenger\/([\d.]+).*$/, "$1")
                    },
                    Taobao: function() {
                        return e.replace(/^.*AliApp\(TB\/([\d.]+).*$/, "$1")
                    },
                    Alipay: function() {
                        return e.replace(/^.*AliApp\(AP\/([\d.]+).*$/, "$1")
                    },
                    Weibo: function() {
                        return e.replace(/^.*weibo__([\d.]+).*$/, "$1")
                    },
                    Douban: function() {
                        return e.replace(/^.*com.douban.frodo\/([\d.]+).*$/, "$1")
                    },
                    Suning: function() {
                        return e.replace(/^.*SNEBUY-APP([\d.]+).*$/, "$1")
                    },
                    iQiYi: function() {
                        return e.replace(/^.*IqiyiVersion\/([\d.]+).*$/, "$1")
                    }
                };
                t.version = "",
                l[t.browser] && (t.version = l[t.browser](),
                t.version == e && (t.version = "")),
                "Edge" == t.browser ? t.engine = "EdgeHTML" : "Chrome" == t.browser && parseInt(t.version) > 27 ? t.engine = "Blink" : "Opera" == t.browser && parseInt(t.version) > 12 ? t.engine = "Blink" : "Yandex" == t.browser ? t.engine = "Blink" : void 0 == t.browser && (t.browser = "Unknow App")
            }
            (e)
        }
    }
    , function(e, t, n) {
        "use strict";
        var r = window
          , i = document
          , o = {}
          , a = {
            "&": "&amp;",
            "<": "&lt;",
            ">": "&gt;",
            '"': "&quot;",
            "'": "&#39;",
            "`": "&#x60;",
            "\\": "&#x5c;"
        };
        for (var s in a)
            o[a[s]] = s;
        var l = /[&<>"'`\\]/g
          , c = RegExp(l.source)
          , d = /&(?:amp|lt|gt|quot|#39|#x60|#x5c);/g
          , u = RegExp(d.source)
          , p = {
            domReady: function(e) {
                if ("complete" === i.readyState || "loading" !== i.readyState && !i.documentElement.doScroll)
                    setTimeout(function() {
                        return e && e()
                    }, 0);
                else {
                    var t = function t() {
                        i.removeEventListener("DOMContentLoaded", t, !1),
                        r.removeEventListener("load", t, !1),
                        e && e()
                    };
                    i.addEventListener("DOMContentLoaded", t, !1),
                    r.addEventListener("load", t, !1)
                }
            },
            dynamicLoadSource: function(e, t, n) {
                var r = {
                    script: "src",
                    link: "href"
                }[e];
                if (p.find(i, e + "[" + r + '="' + t[r] + '"]'))
                    "function" == typeof n && n();
                else {
                    var o = p.create(e, t);
                    i.getElementsByTagName("head")[0].appendChild(o),
                    o.onload = o.onreadystatechange = function() {
                        this.onload = this.onreadystatechange = null,
                        "function" == typeof n && n()
                    }
                }
            },
            on: function(e, t, n, r) {
                for (var i = 0, o = (e = e.split(" ")).length; i < o; i++)
                    p.off(e[i], t, n, r),
                    t.addEventListener ? t.addEventListener(e[i], n, r || !1) : t.attachEvent ? t.attachEvent("on" + e[i], n) : t["on" + e[i]] = n
            },
            off: function(e, t, n, r) {
                for (var i = 0, o = (e = e.split(" ")).length; i < o; i++)
                    t.removeEventListener ? t.removeEventListener(e, n, r || !1) : t.detachEvent ? t.detachEvent("on" + e, n) : t["on" + e] = null
            },
            escape: function(e) {
                return e && c.test(e) ? e.replace(l, function(e) {
                    return a[e]
                }) : e
            },
            unescape: function(e) {
                return e && u.test(e) ? e.replace(d, function(e) {
                    return o[e]
                }) : e
            },
            create: function(e, t, n) {
                var r = document.createElement(e);
                return p.attr(r, t, n),
                r
            },
            find: function(e, t) {
                return e.querySelector(t)
            },
            findAll: function(e, t) {
                return e.querySelectorAll(t)
            },
            attr: function(e, t, n) {
                if (void 0 === e.getAttribute)
                    return p.prop(e, t, n);
                if (void 0 !== n)
                    null === n ? p.removeAttr(e, t) : e.setAttribute(t, n);
                else {
                    if ("[object Object]" !== {}.toString.call(t))
                        return e.getAttribute(t);
                    p.each(t, function(t, n) {
                        e.setAttribute(t, n)
                    })
                }
            },
            prop: function(e, t, n) {
                return void 0 !== n ? e[t] = n : "[object Object]" !== {}.toString.call(t) ? e[t] : void p.each(t, function(t, n) {
                    e[t] = n
                })
            },
            removeAttr: function(e, t) {
                var n = void 0
                  , r = 0
                  , i = t && t.match(/[^\x20\t\r\n\f\*\/\\]+/g);
                if (i && 1 === e.nodeType)
                    for (; n = i[r++]; )
                        e.removeAttribute(n);
                return e
            },
            clearAttr: function(e) {
                var t = e.attributes
                  , n = ["align", "alt", "checked", "class", "disabled", "href", "id", "target", "title", "type", "src", "style"];
                return p.each(t, function(t, r) {
                    var i = r.name;
                    switch (i.toLowerCase()) {
                    case "style":
                        var o = r.value;
                        p.each(o.split(";"), function(t, n) {
                            n.indexOf("color") > -1 ? p.attr(e, "style", n) : p.removeAttr(e, "style")
                        });
                        break;
                    case "class":
                        if ("CODE" == e.nodeName)
                            return !1;
                        var a = r.value;
                        a.indexOf("at") > -1 ? p.attr(e, "class", "at") : a.indexOf("vemoji") > -1 ? p.attr(e, "class", "vemoji") : p.removeAttr(e, "class");
                        break;
                    default:
                        if (n.indexOf(i) > -1)
                            return !0;
                        p.removeAttr(e, i)
                    }
                }),
                e
            },
            remove: function(e) {
                try {
                    e.parentNode && e.parentNode.removeChild(e)
                } catch (e) {}
            },
            each: function(e, t) {
                var n = 0
                  , r = e.length
                  , i = {}.toString.call(e);
                if (["[object Array]", "[object NodeList]"].indexOf(i) > -1)
                    for (; n < r && (!t || !1 !== t.call(e[n], n, e[n])); n++)
                        ;
                else
                    for (n in e)
                        if (e.hasOwnProperty(n) && t && !1 === t.call(e[n], n, e[n]))
                            break;
                return e
            }
        };
        e.exports = p
    }
    , function(e, t, n) {
        "use strict";
        var r = function(e) {
            var t = i(e.getDate(), 2)
              , n = i(e.getMonth() + 1, 2);
            return i(e.getFullYear(), 2) + "-" + n + "-" + t
        }
          , i = function(e, t) {
            for (var n = e.toString(); n.length < t; )
                n = "0" + n;
            return n
        };
        e.exports = function(e, t) {
            if (e)
                try {
                    var n = e.getTime()
                      , i = (new Date).getTime() - n
                      , o = Math.floor(i / 864e5);
                    if (0 === o) {
                        var a = i % 864e5
                          , s = Math.floor(a / 36e5);
                        if (0 === s) {
                            var l = a % 36e5
                              , c = Math.floor(l / 6e4);
                            if (0 === c) {
                                var d = l % 6e4;
                                return Math.round(d / 1e3) + " " + t.timeago.seconds
                            }
                            return c + " " + t.timeago.minutes
                        }
                        return s + " " + t.timeago.hours
                    }
                    return o < 0 ? t.timeago.now : o < 8 ? o + " " + t.timeago.days : r(e)
                } catch (e) {}
        }
    }
    , function(e, t, n) {
        var r;
        !function(i) {
            "use strict";
            function o(e, t) {
                var n = (65535 & e) + (65535 & t);
                return (e >> 16) + (t >> 16) + (n >> 16) << 16 | 65535 & n
            }
            function a(e, t, n, r, i, a) {
                return o(function(e, t) {
                    return e << t | e >>> 32 - t
                }(o(o(t, e), o(r, a)), i), n)
            }
            function s(e, t, n, r, i, o, s) {
                return a(t & n | ~t & r, e, t, i, o, s)
            }
            function l(e, t, n, r, i, o, s) {
                return a(t & r | n & ~r, e, t, i, o, s)
            }
            function c(e, t, n, r, i, o, s) {
                return a(t ^ n ^ r, e, t, i, o, s)
            }
            function d(e, t, n, r, i, o, s) {
                return a(n ^ (t | ~r), e, t, i, o, s)
            }
            function u(e, t) {
                e[t >> 5] |= 128 << t % 32,
                e[14 + (t + 64 >>> 9 << 4)] = t;
                var n, r, i, a, u, p = 1732584193, f = -271733879, h = -1732584194, v = 271733878;
                for (n = 0; n < e.length; n += 16)
                    r = p,
                    i = f,
                    a = h,
                    u = v,
                    f = d(f = d(f = d(f = d(f = c(f = c(f = c(f = c(f = l(f = l(f = l(f = l(f = s(f = s(f = s(f = s(f, h = s(h, v = s(v, p = s(p, f, h, v, e[n], 7, -680876936), f, h, e[n + 1], 12, -389564586), p, f, e[n + 2], 17, 606105819), v, p, e[n + 3], 22, -1044525330), h = s(h, v = s(v, p = s(p, f, h, v, e[n + 4], 7, -176418897), f, h, e[n + 5], 12, 1200080426), p, f, e[n + 6], 17, -1473231341), v, p, e[n + 7], 22, -45705983), h = s(h, v = s(v, p = s(p, f, h, v, e[n + 8], 7, 1770035416), f, h, e[n + 9], 12, -1958414417), p, f, e[n + 10], 17, -42063), v, p, e[n + 11], 22, -1990404162), h = s(h, v = s(v, p = s(p, f, h, v, e[n + 12], 7, 1804603682), f, h, e[n + 13], 12, -40341101), p, f, e[n + 14], 17, -1502002290), v, p, e[n + 15], 22, 1236535329), h = l(h, v = l(v, p = l(p, f, h, v, e[n + 1], 5, -165796510), f, h, e[n + 6], 9, -1069501632), p, f, e[n + 11], 14, 643717713), v, p, e[n], 20, -373897302), h = l(h, v = l(v, p = l(p, f, h, v, e[n + 5], 5, -701558691), f, h, e[n + 10], 9, 38016083), p, f, e[n + 15], 14, -660478335), v, p, e[n + 4], 20, -405537848), h = l(h, v = l(v, p = l(p, f, h, v, e[n + 9], 5, 568446438), f, h, e[n + 14], 9, -1019803690), p, f, e[n + 3], 14, -187363961), v, p, e[n + 8], 20, 1163531501), h = l(h, v = l(v, p = l(p, f, h, v, e[n + 13], 5, -1444681467), f, h, e[n + 2], 9, -51403784), p, f, e[n + 7], 14, 1735328473), v, p, e[n + 12], 20, -1926607734), h = c(h, v = c(v, p = c(p, f, h, v, e[n + 5], 4, -378558), f, h, e[n + 8], 11, -2022574463), p, f, e[n + 11], 16, 1839030562), v, p, e[n + 14], 23, -35309556), h = c(h, v = c(v, p = c(p, f, h, v, e[n + 1], 4, -1530992060), f, h, e[n + 4], 11, 1272893353), p, f, e[n + 7], 16, -155497632), v, p, e[n + 10], 23, -1094730640), h = c(h, v = c(v, p = c(p, f, h, v, e[n + 13], 4, 681279174), f, h, e[n], 11, -358537222), p, f, e[n + 3], 16, -722521979), v, p, e[n + 6], 23, 76029189), h = c(h, v = c(v, p = c(p, f, h, v, e[n + 9], 4, -640364487), f, h, e[n + 12], 11, -421815835), p, f, e[n + 15], 16, 530742520), v, p, e[n + 2], 23, -995338651), h = d(h, v = d(v, p = d(p, f, h, v, e[n], 6, -198630844), f, h, e[n + 7], 10, 1126891415), p, f, e[n + 14], 15, -1416354905), v, p, e[n + 5], 21, -57434055), h = d(h, v = d(v, p = d(p, f, h, v, e[n + 12], 6, 1700485571), f, h, e[n + 3], 10, -1894986606), p, f, e[n + 10], 15, -1051523), v, p, e[n + 1], 21, -2054922799), h = d(h, v = d(v, p = d(p, f, h, v, e[n + 8], 6, 1873313359), f, h, e[n + 15], 10, -30611744), p, f, e[n + 6], 15, -1560198380), v, p, e[n + 13], 21, 1309151649), h = d(h, v = d(v, p = d(p, f, h, v, e[n + 4], 6, -145523070), f, h, e[n + 11], 10, -1120210379), p, f, e[n + 2], 15, 718787259), v, p, e[n + 9], 21, -343485551),
                    p = o(p, r),
                    f = o(f, i),
                    h = o(h, a),
                    v = o(v, u);
                return [p, f, h, v]
            }
            function p(e) {
                var t, n = "", r = 32 * e.length;
                for (t = 0; t < r; t += 8)
                    n += String.fromCharCode(e[t >> 5] >>> t % 32 & 255);
                return n
            }
            function f(e) {
                var t, n = [];
                for (n[(e.length >> 2) - 1] = void 0,
                t = 0; t < n.length; t += 1)
                    n[t] = 0;
                var r = 8 * e.length;
                for (t = 0; t < r; t += 8)
                    n[t >> 5] |= (255 & e.charCodeAt(t / 8)) << t % 32;
                return n
            }
            function h(e) {
                var t, n, r = "0123456789abcdef", i = "";
                for (n = 0; n < e.length; n += 1)
                    t = e.charCodeAt(n),
                    i += r.charAt(t >>> 4 & 15) + r.charAt(15 & t);
                return i
            }
            function v(e) {
                return unescape(encodeURIComponent(e))
            }
            function g(e) {
                return function(e) {
                    return p(u(f(e), 8 * e.length))
                }(v(e))
            }
            function m(e, t) {
                return function(e, t) {
                    var n, r, i = f(e), o = [], a = [];
                    for (o[15] = a[15] = void 0,
                    i.length > 16 && (i = u(i, 8 * e.length)),
                    n = 0; n < 16; n += 1)
                        o[n] = 909522486 ^ i[n],
                        a[n] = 1549556828 ^ i[n];
                    return r = u(o.concat(f(t)), 512 + 8 * t.length),
                    p(u(a.concat(r), 640))
                }(v(e), v(t))
            }
            function b(e, t, n) {
                return t ? n ? m(t, e) : function(e, t) {
                    return h(m(e, t))
                }(t, e) : n ? g(e) : function(e) {
                    return h(g(e))
                }(e)
            }
            void 0 !== (r = function() {
                return b
            }
            .call(t, n, t, e)) && (e.exports = r)
        }()
    }
    , function(e, t, n) {
        e.exports = function() {
            "use strict";
            var e = function(e, t) {
                return function(e) {
                    var t = e.exports = function() {
                        return new RegExp("(?:" + t.line().source + ")|(?:" + t.block().source + ")","gm")
                    }
                    ;
                    t.line = function() {
                        return /(?:^|\s)\/\/(.+?)$/gm
                    }
                    ,
                    t.block = function() {
                        return /\/\*([\S\s]*?)\*\//gm
                    }
                }(t = {
                    exports: {}
                }),
                t.exports
            }()
              , t = ["23AC69", "91C132", "F19726", "E8552D", "1AAB8E", "E1147F", "2980C1", "1BA1E6", "9FA0A0", "F19726", "E30B20", "E30B20", "A3338B"];
            return function(n, r) {
                void 0 === r && (r = {});
                var i = r.colors;
                void 0 === i && (i = t);
                var o = 0
                  , a = {}
                  , s = new RegExp("(" + /[\u4E00-\u9FFF\u3400-\u4dbf\uf900-\ufaff\u3040-\u309f\uac00-\ud7af\u0400-\u04FF]+|\w+/.source + "|" + /</.source + ")|(" + e().source + ")","gmi");
                return n.replace(s, function(e, t, n) {
                    if (n)
                        return function(e) {
                            return '<span style="color: slategray">' + e + "</span>"
                        }(n);
                    if ("<" === t)
                        return "&lt;";
                    var r;
                    a[t] ? r = a[t] : (r = i[o],
                    a[t] = r);
                    var s = '<span style="color: #' + r + '">' + t + "</span>";
                    return o = ++o % i.length,
                    s
                })
            }
        }()
    }
    , function(e, t, n) {
        (function(t) {
            !function(t) {
                "use strict";
                function n(e) {
                    this.tokens = [],
                    this.tokens.links = {},
                    this.options = e || h.defaults,
                    this.rules = v.normal,
                    this.options.pedantic ? this.rules = v.pedantic : this.options.gfm && (this.options.tables ? this.rules = v.tables : this.rules = v.gfm)
                }
                function r(e, t) {
                    if (this.options = t || h.defaults,
                    this.links = e,
                    this.rules = g.normal,
                    this.renderer = this.options.renderer || new i,
                    this.renderer.options = this.options,
                    !this.links)
                        throw new Error("Tokens array requires a `links` property.");
                    this.options.pedantic ? this.rules = g.pedantic : this.options.gfm && (this.options.breaks ? this.rules = g.breaks : this.rules = g.gfm)
                }
                function i(e) {
                    this.options = e || h.defaults
                }
                function o() {}
                function a(e) {
                    this.tokens = [],
                    this.token = null,
                    this.options = e || h.defaults,
                    this.options.renderer = this.options.renderer || new i,
                    this.renderer = this.options.renderer,
                    this.renderer.options = this.options
                }
                function s(e, t) {
                    return e.replace(t ? /&/g : /&(?!#?\w+;)/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;")
                }
                function l(e) {
                    return e.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi, function(e, t) {
                        return "colon" === (t = t.toLowerCase()) ? ":" : "#" === t.charAt(0) ? "x" === t.charAt(1) ? String.fromCharCode(parseInt(t.substring(2), 16)) : String.fromCharCode(+t.substring(1)) : ""
                    })
                }
                function c(e, t) {
                    return e = e.source || e,
                    t = t || "",
                    {
                        replace: function(t, n) {
                            return n = (n = n.source || n).replace(/(^|[^\[])\^/g, "$1"),
                            e = e.replace(t, n),
                            this
                        },
                        getRegex: function() {
                            return new RegExp(e,t)
                        }
                    }
                }
                function d(e, t) {
                    return m[" " + e] || (/^[^:]+:\/*[^\/]*$/.test(e) ? m[" " + e] = e + "/" : m[" " + e] = e.replace(/[^\/]*$/, "")),
                    e = m[" " + e],
                    "//" === t.slice(0, 2) ? e.replace(/:[\s\S]*/, ":") + t : "/" === t.charAt(0) ? e.replace(/(:\/*[^\/]*)[\s\S]*/, "$1") + t : e + t
                }
                function u() {}
                function p(e) {
                    for (var t, n, r = 1; r < arguments.length; r++)
                        for (n in t = arguments[r])
                            Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);
                    return e
                }
                function f(e, t) {
                    var n = e.replace(/([^\\])\|/g, "$1 |").split(/ +\| */)
                      , r = 0;
                    if (n.length > t)
                        n.splice(t);
                    else
                        for (; n.length < t; )
                            n.push("");
                    for (; r < n.length; r++)
                        n[r] = n[r].replace(/\\\|/g, "|");
                    return n
                }
                function h(e, t, r) {
                    if (void 0 === e || null === e)
                        throw new Error("marked(): input parameter is undefined or null");
                    if ("string" != typeof e)
                        throw new Error("marked(): input parameter is of type " + Object.prototype.toString.call(e) + ", string expected");
                    if (r || "function" == typeof t) {
                        r || (r = t,
                        t = null);
                        var i, o, l = (t = p({}, h.defaults, t || {})).highlight, c = 0;
                        try {
                            i = n.lex(e, t)
                        } catch (e) {
                            return r(e)
                        }
                        o = i.length;
                        var d = function(e) {
                            if (e)
                                return t.highlight = l,
                                r(e);
                            var n;
                            try {
                                n = a.parse(i, t)
                            } catch (t) {
                                e = t
                            }
                            return t.highlight = l,
                            e ? r(e) : r(null, n)
                        };
                        if (!l || l.length < 3)
                            return d();
                        if (delete t.highlight,
                        !o)
                            return d();
                        for (; c < i.length; c++)
                            !function(e) {
                                "code" !== e.type ? --o || d() : l(e.text, e.lang, function(t, n) {
                                    return t ? d(t) : null == n || n === e.text ? --o || d() : (e.text = n,
                                    e.escaped = !0,
                                    void (--o || d()))
                                })
                            }(i[c])
                    } else
                        try {
                            return t && (t = p({}, h.defaults, t)),
                            a.parse(n.lex(e, t), t)
                        } catch (e) {
                            if (e.message += "\nPlease report this to https://github.com/markedjs/marked.",
                            (t || h.defaults).silent)
                                return "<p>An error occurred:</p><pre>" + s(e.message + "", !0) + "</pre>";
                            throw e
                        }
                }
                var v = {
                    newline: /^\n+/,
                    code: /^( {4}[^\n]+\n*)+/,
                    fences: u,
                    hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,
                    heading: /^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,
                    nptable: u,
                    blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
                    list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
                    html: "^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|<![A-Z][\\s\\S]*?>\\n*|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$))",
                    def: /^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,
                    table: u,
                    lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,
                    paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,
                    text: /^[^\n]+/,
                    _label: /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,
                    _title: /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/
                };
                v.def = c(v.def).replace("label", v._label).replace("title", v._title).getRegex(),
                v.bullet = /(?:[*+-]|\d+\.)/,
                v.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/,
                v.item = c(v.item, "gm").replace(/bull/g, v.bullet).getRegex(),
                v.list = c(v.list).replace(/bull/g, v.bullet).replace("hr", "\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def", "\\n+(?=" + v.def.source + ")").getRegex(),
                v._tag = "address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",
                v._comment = /<!--(?!-?>)[\s\S]*?-->/,
                v.html = c(v.html, "i").replace("comment", v._comment).replace("tag", v._tag).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),
                v.paragraph = c(v.paragraph).replace("hr", v.hr).replace("heading", v.heading).replace("lheading", v.lheading).replace("tag", v._tag).getRegex(),
                v.blockquote = c(v.blockquote).replace("paragraph", v.paragraph).getRegex(),
                v.normal = p({}, v),
                v.gfm = p({}, v.normal, {
                    fences: /^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\n? *\1 *(?:\n+|$)/,
                    paragraph: /^/,
                    heading: /^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/
                }),
                v.gfm.paragraph = c(v.paragraph).replace("(?!", "(?!" + v.gfm.fences.source.replace("\\1", "\\2") + "|" + v.list.source.replace("\\1", "\\3") + "|").getRegex(),
                v.tables = p({}, v.gfm, {
                    nptable: /^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,
                    table: /^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/
                }),
                v.pedantic = p({}, v.normal, {
                    html: c("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment", v._comment).replace(/tag/g, "(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),
                    def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/
                }),
                n.rules = v,
                n.lex = function(e, t) {
                    return new n(t).lex(e)
                }
                ,
                n.prototype.lex = function(e) {
                    return e = e.replace(/\r\n|\r/g, "\n").replace(/\t/g, "    ").replace(/\u00a0/g, " ").replace(/\u2424/g, "\n"),
                    this.token(e, !0)
                }
                ,
                n.prototype.token = function(e, t) {
                    e = e.replace(/^ +$/gm, "");
                    for (var n, r, i, o, a, s, l, c, d, u, p, h, g; e; )
                        if ((i = this.rules.newline.exec(e)) && (e = e.substring(i[0].length),
                        i[0].length > 1 && this.tokens.push({
                            type: "space"
                        })),
                        i = this.rules.code.exec(e))
                            e = e.substring(i[0].length),
                            i = i[0].replace(/^ {4}/gm, ""),
                            this.tokens.push({
                                type: "code",
                                text: this.options.pedantic ? i : i.replace(/\n+$/, "")
                            });
                        else if (i = this.rules.fences.exec(e))
                            e = e.substring(i[0].length),
                            this.tokens.push({
                                type: "code",
                                lang: i[2],
                                text: i[3] || ""
                            });
                        else if (i = this.rules.heading.exec(e))
                            e = e.substring(i[0].length),
                            this.tokens.push({
                                type: "heading",
                                depth: i[1].length,
                                text: i[2]
                            });
                        else if (t && (i = this.rules.nptable.exec(e)) && (s = {
                            type: "table",
                            header: f(i[1].replace(/^ *| *\| *$/g, "")),
                            align: i[2].replace(/^ *|\| *$/g, "").split(/ *\| */),
                            cells: i[3] ? i[3].replace(/\n$/, "").split("\n") : []
                        }).header.length === s.align.length) {
                            for (e = e.substring(i[0].length),
                            c = 0; c < s.align.length; c++)
                                /^ *-+: *$/.test(s.align[c]) ? s.align[c] = "right" : /^ *:-+: *$/.test(s.align[c]) ? s.align[c] = "center" : /^ *:-+ *$/.test(s.align[c]) ? s.align[c] = "left" : s.align[c] = null;
                            for (c = 0; c < s.cells.length; c++)
                                s.cells[c] = f(s.cells[c], s.header.length);
                            this.tokens.push(s)
                        } else if (i = this.rules.hr.exec(e))
                            e = e.substring(i[0].length),
                            this.tokens.push({
                                type: "hr"
                            });
                        else if (i = this.rules.blockquote.exec(e))
                            e = e.substring(i[0].length),
                            this.tokens.push({
                                type: "blockquote_start"
                            }),
                            i = i[0].replace(/^ *> ?/gm, ""),
                            this.token(i, t),
                            this.tokens.push({
                                type: "blockquote_end"
                            });
                        else if (i = this.rules.list.exec(e)) {
                            for (e = e.substring(i[0].length),
                            p = (o = i[2]).length > 1,
                            this.tokens.push({
                                type: "list_start",
                                ordered: p,
                                start: p ? +o : ""
                            }),
                            n = !1,
                            u = (i = i[0].match(this.rules.item)).length,
                            c = 0; c < u; c++)
                                l = (s = i[c]).length,
                                ~(s = s.replace(/^ *([*+-]|\d+\.) +/, "")).indexOf("\n ") && (l -= s.length,
                                s = this.options.pedantic ? s.replace(/^ {1,4}/gm, "") : s.replace(new RegExp("^ {1," + l + "}","gm"), "")),
                                this.options.smartLists && c !== u - 1 && (o === (a = v.bullet.exec(i[c + 1])[0]) || o.length > 1 && a.length > 1 || (e = i.slice(c + 1).join("\n") + e,
                                c = u - 1)),
                                r = n || /\n\n(?!\s*$)/.test(s),
                                c !== u - 1 && (n = "\n" === s.charAt(s.length - 1),
                                r || (r = n)),
                                g = void 0,
                                (h = /^\[[ xX]\] /.test(s)) && (g = " " !== s[1],
                                s = s.replace(/^\[[ xX]\] +/, "")),
                                this.tokens.push({
                                    type: r ? "loose_item_start" : "list_item_start",
                                    task: h,
                                    checked: g
                                }),
                                this.token(s, !1),
                                this.tokens.push({
                                    type: "list_item_end"
                                });
                            this.tokens.push({
                                type: "list_end"
                            })
                        } else if (i = this.rules.html.exec(e))
                            e = e.substring(i[0].length),
                            this.tokens.push({
                                type: this.options.sanitize ? "paragraph" : "html",
                                pre: !this.options.sanitizer && ("pre" === i[1] || "script" === i[1] || "style" === i[1]),
                                text: i[0]
                            });
                        else if (t && (i = this.rules.def.exec(e)))
                            e = e.substring(i[0].length),
                            i[3] && (i[3] = i[3].substring(1, i[3].length - 1)),
                            d = i[1].toLowerCase().replace(/\s+/g, " "),
                            this.tokens.links[d] || (this.tokens.links[d] = {
                                href: i[2],
                                title: i[3]
                            });
                        else if (t && (i = this.rules.table.exec(e)) && (s = {
                            type: "table",
                            header: f(i[1].replace(/^ *| *\| *$/g, "")),
                            align: i[2].replace(/^ *|\| *$/g, "").split(/ *\| */),
                            cells: i[3] ? i[3].replace(/(?: *\| *)?\n$/, "").split("\n") : []
                        }).header.length === s.align.length) {
                            for (e = e.substring(i[0].length),
                            c = 0; c < s.align.length; c++)
                                /^ *-+: *$/.test(s.align[c]) ? s.align[c] = "right" : /^ *:-+: *$/.test(s.align[c]) ? s.align[c] = "center" : /^ *:-+ *$/.test(s.align[c]) ? s.align[c] = "left" : s.align[c] = null;
                            for (c = 0; c < s.cells.length; c++)
                                s.cells[c] = f(s.cells[c].replace(/^ *\| *| *\| *$/g, ""), s.header.length);
                            this.tokens.push(s)
                        } else if (i = this.rules.lheading.exec(e))
                            e = e.substring(i[0].length),
                            this.tokens.push({
                                type: "heading",
                                depth: "=" === i[2] ? 1 : 2,
                                text: i[1]
                            });
                        else if (t && (i = this.rules.paragraph.exec(e)))
                            e = e.substring(i[0].length),
                            this.tokens.push({
                                type: "paragraph",
                                text: "\n" === i[1].charAt(i[1].length - 1) ? i[1].slice(0, -1) : i[1]
                            });
                        else if (i = this.rules.text.exec(e))
                            e = e.substring(i[0].length),
                            this.tokens.push({
                                type: "text",
                                text: i[0]
                            });
                        else if (e)
                            throw new Error("Infinite loop on byte: " + e.charCodeAt(0));
                    return this.tokens
                }
                ;
                var g = {
                    escape: /^\\([!"#$%&'()*+,\-.\/:;<=>?@\[\]\\^_`{|}~])/,
                    autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
                    url: u,
                    tag: "^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",
                    link: /^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,
                    reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,
                    nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,
                    strong: /^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)|^__([^\s])__(?!_)|^\*\*([^\s])\*\*(?!\*)/,
                    em: /^_([^\s][\s\S]*?[^\s_])_(?!_)|^_([^\s_][\s\S]*?[^\s])_(?!_)|^\*([^\s][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*][\s\S]*?[^\s])\*(?!\*)|^_([^\s_])_(?!_)|^\*([^\s*])\*(?!\*)/,
                    code: /^(`+)\s*([\s\S]*?[^`]?)\s*\1(?!`)/,
                    br: /^ {2,}\n(?!\s*$)/,
                    del: u,
                    text: /^[\s\S]+?(?=[\\<!\[`*]|\b_| {2,}\n|$)/,
                    _escapes: /\\([!"#$%&'()*+,\-.\/:;<=>?@\[\]\\^_`{|}~])/g,
                    _scheme: /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,
                    _email: /[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/
                };
                g.autolink = c(g.autolink).replace("scheme", g._scheme).replace("email", g._email).getRegex(),
                g._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,
                g.tag = c(g.tag).replace("comment", v._comment).replace("attribute", g._attribute).getRegex(),
                g._label = /(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/,
                g._href = /\s*(<(?:\\[<>]?|[^\s<>\\])*>|(?:\\[()]?|\([^\s\x00-\x1f()\\]*\)|[^\s\x00-\x1f()\\])*?)/,
                g._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,
                g.link = c(g.link).replace("label", g._label).replace("href", g._href).replace("title", g._title).getRegex(),
                g.reflink = c(g.reflink).replace("label", g._label).getRegex(),
                g.normal = p({}, g),
                g.pedantic = p({}, g.normal, {
                    strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
                    em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,
                    link: c(/^!?\[(label)\]\((.*?)\)/).replace("label", g._label).getRegex(),
                    reflink: c(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label", g._label).getRegex()
                }),
                g.gfm = p({}, g.normal, {
                    escape: c(g.escape).replace("])", "~|])").getRegex(),
                    url: c(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("email", g._email).getRegex(),
                    _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
                    del: /^~~(?=\S)([\s\S]*?\S)~~/,
                    text: c(g.text).replace("]|", "~]|").replace("|", "|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&'*+/=?^_`{\\|}~-]+@|").getRegex()
                }),
                g.breaks = p({}, g.gfm, {
                    br: c(g.br).replace("{2,}", "*").getRegex(),
                    text: c(g.gfm.text).replace("{2,}", "*").getRegex()
                }),
                r.rules = g,
                r.output = function(e, t, n) {
                    return new r(t,n).output(e)
                }
                ,
                r.prototype.output = function(e) {
                    for (var t, n, i, o, a, l = ""; e; )
                        if (a = this.rules.escape.exec(e))
                            e = e.substring(a[0].length),
                            l += a[1];
                        else if (a = this.rules.autolink.exec(e))
                            e = e.substring(a[0].length),
                            "@" === a[2] ? i = "mailto:" + (n = s(this.mangle(a[1]))) : i = n = s(a[1]),
                            l += this.renderer.link(i, null, n);
                        else if (this.inLink || !(a = this.rules.url.exec(e))) {
                            if (a = this.rules.tag.exec(e))
                                !this.inLink && /^<a /i.test(a[0]) ? this.inLink = !0 : this.inLink && /^<\/a>/i.test(a[0]) && (this.inLink = !1),
                                e = e.substring(a[0].length),
                                l += this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(a[0]) : s(a[0]) : a[0];
                            else if (a = this.rules.link.exec(e))
                                e = e.substring(a[0].length),
                                this.inLink = !0,
                                i = a[2],
                                this.options.pedantic ? (t = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(i)) ? (i = t[1],
                                o = t[3]) : o = "" : o = a[3] ? a[3].slice(1, -1) : "",
                                i = i.trim().replace(/^<([\s\S]*)>$/, "$1"),
                                l += this.outputLink(a, {
                                    href: r.escapes(i),
                                    title: r.escapes(o)
                                }),
                                this.inLink = !1;
                            else if ((a = this.rules.reflink.exec(e)) || (a = this.rules.nolink.exec(e))) {
                                if (e = e.substring(a[0].length),
                                t = (a[2] || a[1]).replace(/\s+/g, " "),
                                !(t = this.links[t.toLowerCase()]) || !t.href) {
                                    l += a[0].charAt(0),
                                    e = a[0].substring(1) + e;
                                    continue
                                }
                                this.inLink = !0,
                                l += this.outputLink(a, t),
                                this.inLink = !1
                            } else if (a = this.rules.strong.exec(e))
                                e = e.substring(a[0].length),
                                l += this.renderer.strong(this.output(a[4] || a[3] || a[2] || a[1]));
                            else if (a = this.rules.em.exec(e))
                                e = e.substring(a[0].length),
                                l += this.renderer.em(this.output(a[6] || a[5] || a[4] || a[3] || a[2] || a[1]));
                            else if (a = this.rules.code.exec(e))
                                e = e.substring(a[0].length),
                                l += this.renderer.codespan(s(a[2].trim(), !0));
                            else if (a = this.rules.br.exec(e))
                                e = e.substring(a[0].length),
                                l += this.renderer.br();
                            else if (a = this.rules.del.exec(e))
                                e = e.substring(a[0].length),
                                l += this.renderer.del(this.output(a[1]));
                            else if (a = this.rules.text.exec(e))
                                e = e.substring(a[0].length),
                                l += this.renderer.text(s(this.smartypants(a[0])));
                            else if (e)
                                throw new Error("Infinite loop on byte: " + e.charCodeAt(0))
                        } else
                            a[0] = this.rules._backpedal.exec(a[0])[0],
                            e = e.substring(a[0].length),
                            "@" === a[2] ? i = "mailto:" + (n = s(a[0])) : (n = s(a[0]),
                            i = "www." === a[1] ? "http://" + n : n),
                            l += this.renderer.link(i, null, n);
                    return l
                }
                ,
                r.escapes = function(e) {
                    return e ? e.replace(r.rules._escapes, "$1") : e
                }
                ,
                r.prototype.outputLink = function(e, t) {
                    var n = t.href
                      , r = t.title ? s(t.title) : null;
                    return "!" !== e[0].charAt(0) ? this.renderer.link(n, r, this.output(e[1])) : this.renderer.image(n, r, s(e[1]))
                }
                ,
                r.prototype.smartypants = function(e) {
                    return this.options.smartypants ? e.replace(/---/g, "—").replace(/--/g, "–").replace(/(^|[-\u2014\/(\[{"\s])'/g, "$1‘").replace(/'/g, "’").replace(/(^|[-\u2014\/(\[{\u2018\s])"/g, "$1“").replace(/"/g, "”").replace(/\.{3}/g, "…") : e
                }
                ,
                r.prototype.mangle = function(e) {
                    if (!this.options.mangle)
                        return e;
                    for (var t, n = "", r = e.length, i = 0; i < r; i++)
                        t = e.charCodeAt(i),
                        Math.random() > .5 && (t = "x" + t.toString(16)),
                        n += "&#" + t + ";";
                    return n
                }
                ,
                i.prototype.code = function(e, t, n) {
                    if (this.options.highlight) {
                        var r = this.options.highlight(e, t);
                        null != r && r !== e && (n = !0,
                        e = r)
                    }
                    return t ? '<pre><code class="' + this.options.langPrefix + s(t, !0) + '">' + (n ? e : s(e, !0)) + "</code></pre>\n" : "<pre><code>" + (n ? e : s(e, !0)) + "</code></pre>"
                }
                ,
                i.prototype.blockquote = function(e) {
                    return "<blockquote>\n" + e + "</blockquote>\n"
                }
                ,
                i.prototype.html = function(e) {
                    return e
                }
                ,
                i.prototype.heading = function(e, t, n) {
                    return this.options.headerIds ? "<h" + t + ' id="' + this.options.headerPrefix + n.toLowerCase().replace(/[^\w]+/g, "-") + '">' + e + "</h" + t + ">\n" : "<h" + t + ">" + e + "</h" + t + ">\n"
                }
                ,
                i.prototype.hr = function() {
                    return this.options.xhtml ? "<hr/>\n" : "<hr>\n"
                }
                ,
                i.prototype.list = function(e, t, n) {
                    var r = t ? "ol" : "ul";
                    return "<" + r + (t && 1 !== n ? ' start="' + n + '"' : "") + ">\n" + e + "</" + r + ">\n"
                }
                ,
                i.prototype.listitem = function(e) {
                    return "<li>" + e + "</li>\n"
                }
                ,
                i.prototype.checkbox = function(e) {
                    return "<input " + (e ? 'checked="" ' : "") + 'disabled="" type="checkbox"' + (this.options.xhtml ? " /" : "") + "> "
                }
                ,
                i.prototype.paragraph = function(e) {
                    return "<p>" + e + "</p>\n"
                }
                ,
                i.prototype.table = function(e, t) {
                    return t && (t = "<tbody>" + t + "</tbody>"),
                    "<table>\n<thead>\n" + e + "</thead>\n" + t + "</table>\n"
                }
                ,
                i.prototype.tablerow = function(e) {
                    return "<tr>\n" + e + "</tr>\n"
                }
                ,
                i.prototype.tablecell = function(e, t) {
                    var n = t.header ? "th" : "td";
                    return (t.align ? "<" + n + ' align="' + t.align + '">' : "<" + n + ">") + e + "</" + n + ">\n"
                }
                ,
                i.prototype.strong = function(e) {
                    return "<strong>" + e + "</strong>"
                }
                ,
                i.prototype.em = function(e) {
                    return "<em>" + e + "</em>"
                }
                ,
                i.prototype.codespan = function(e) {
                    return "<code>" + e + "</code>"
                }
                ,
                i.prototype.br = function() {
                    return this.options.xhtml ? "<br/>" : "<br>"
                }
                ,
                i.prototype.del = function(e) {
                    return "<del>" + e + "</del>"
                }
                ,
                i.prototype.link = function(e, t, n) {
                    if (this.options.sanitize) {
                        try {
                            var r = decodeURIComponent(l(e)).replace(/[^\w:]/g, "").toLowerCase()
                        } catch (e) {
                            return n
                        }
                        if (0 === r.indexOf("javascript:") || 0 === r.indexOf("vbscript:") || 0 === r.indexOf("data:"))
                            return n
                    }
                    this.options.baseUrl && !b.test(e) && (e = d(this.options.baseUrl, e));
                    try {
                        e = encodeURI(e).replace(/%25/g, "%")
                    } catch (e) {
                        return n
                    }
                    var i = '<a href="' + s(e) + '"';
                    return t && (i += ' title="' + t + '"'),
                    i + ">" + n + "</a>"
                }
                ,
                i.prototype.image = function(e, t, n) {
                    this.options.baseUrl && !b.test(e) && (e = d(this.options.baseUrl, e));
                    var r = '<img src="' + e + '" alt="' + n + '"';
                    return t && (r += ' title="' + t + '"'),
                    r + (this.options.xhtml ? "/>" : ">")
                }
                ,
                i.prototype.text = function(e) {
                    return e
                }
                ,
                o.prototype.strong = o.prototype.em = o.prototype.codespan = o.prototype.del = o.prototype.text = function(e) {
                    return e
                }
                ,
                o.prototype.link = o.prototype.image = function(e, t, n) {
                    return "" + n
                }
                ,
                o.prototype.br = function() {
                    return ""
                }
                ,
                a.parse = function(e, t) {
                    return new a(t).parse(e)
                }
                ,
                a.prototype.parse = function(e) {
                    this.inline = new r(e.links,this.options),
                    this.inlineText = new r(e.links,p({}, this.options, {
                        renderer: new o
                    })),
                    this.tokens = e.reverse();
                    for (var t = ""; this.next(); )
                        t += this.tok();
                    return t
                }
                ,
                a.prototype.next = function() {
                    return this.token = this.tokens.pop()
                }
                ,
                a.prototype.peek = function() {
                    return this.tokens[this.tokens.length - 1] || 0
                }
                ,
                a.prototype.parseText = function() {
                    for (var e = this.token.text; "text" === this.peek().type; )
                        e += "\n" + this.next().text;
                    return this.inline.output(e)
                }
                ,
                a.prototype.tok = function() {
                    switch (this.token.type) {
                    case "space":
                        return "";
                    case "hr":
                        return this.renderer.hr();
                    case "heading":
                        return this.renderer.heading(this.inline.output(this.token.text), this.token.depth, l(this.inlineText.output(this.token.text)));
                    case "code":
                        return this.renderer.code(this.token.text, this.token.lang, this.token.escaped);
                    case "table":
                        var e, t, n, r, i = "", o = "";
                        for (n = "",
                        e = 0; e < this.token.header.length; e++)
                            n += this.renderer.tablecell(this.inline.output(this.token.header[e]), {
                                header: !0,
                                align: this.token.align[e]
                            });
                        for (i += this.renderer.tablerow(n),
                        e = 0; e < this.token.cells.length; e++) {
                            for (t = this.token.cells[e],
                            n = "",
                            r = 0; r < t.length; r++)
                                n += this.renderer.tablecell(this.inline.output(t[r]), {
                                    header: !1,
                                    align: this.token.align[r]
                                });
                            o += this.renderer.tablerow(n)
                        }
                        return this.renderer.table(i, o);
                    case "blockquote_start":
                        for (o = ""; "blockquote_end" !== this.next().type; )
                            o += this.tok();
                        return this.renderer.blockquote(o);
                    case "list_start":
                        o = "";
                        for (var a = this.token.ordered, s = this.token.start; "list_end" !== this.next().type; )
                            o += this.tok();
                        return this.renderer.list(o, a, s);
                    case "list_item_start":
                        for (o = "",
                        this.token.task && (o += this.renderer.checkbox(this.token.checked)); "list_item_end" !== this.next().type; )
                            o += "text" === this.token.type ? this.parseText() : this.tok();
                        return this.renderer.listitem(o);
                    case "loose_item_start":
                        for (o = ""; "list_item_end" !== this.next().type; )
                            o += this.tok();
                        return this.renderer.listitem(o);
                    case "html":
                        return this.renderer.html(this.token.text);
                    case "paragraph":
                        return this.renderer.paragraph(this.inline.output(this.token.text));
                    case "text":
                        return this.renderer.paragraph(this.parseText())
                    }
                }
                ;
                var m = {}
                  , b = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;
                u.exec = u,
                h.options = h.setOptions = function(e) {
                    return p(h.defaults, e),
                    h
                }
                ,
                h.getDefaults = function() {
                    return {
                        baseUrl: null,
                        breaks: !1,
                        gfm: !0,
                        headerIds: !0,
                        headerPrefix: "",
                        highlight: null,
                        langPrefix: "language-",
                        mangle: !0,
                        pedantic: !1,
                        renderer: new i,
                        sanitize: !1,
                        sanitizer: null,
                        silent: !1,
                        smartLists: !1,
                        smartypants: !1,
                        tables: !0,
                        xhtml: !1
                    }
                }
                ,
                h.defaults = h.getDefaults(),
                h.Parser = a,
                h.parser = a.parse,
                h.Renderer = i,
                h.TextRenderer = o,
                h.Lexer = n,
                h.lexer = n.lex,
                h.InlineLexer = r,
                h.inlineLexer = r.output,
                h.parse = h,
                e.exports = h
            }(this || "undefined" != typeof window && window)
        }
        ).call(t, n(10))
    }
    , function(e, t) {
        e.exports = {
            name: "valine",
            version: "Volantis Edition (based on 1.3.10)",
            description: "A simple comment system based on Leancloud.",
            main: "/dist/Valine.min.js",
            author: "xCss <xioveliu@gmail.com> (https://github.com/xCss)",
            scripts: {
                test: "webpack",
                build: "webpack",
                dev: "webpack-dev-server --env.dev",
                clean: "rm -rf dist/* "
            },
            keywords: ["simple", "easy-to-use", "fast-and-safe", "comment-system"],
            license: "GPL-2.0",
            repository: {
                type: "git",
                url: "git+https://github.com/xcss/Valine.git"
            },
            homepage: "https://github.com/xcss/Valine#readme",
            devDependencies: {
                autoprefixer: "^7.1.1",
                autosize: "^4.0.2",
                "babel-core": "^6.25.0",
                "babel-loader": "^7.1.1",
                "babel-polyfill": "^6.23.0",
                "babel-preset-es2015": "^6.24.1",
                "babel-preset-stage-0": "^6.24.1",
                "blueimp-md5": "^2.8.0",
                "css-loader": "^0.28.4",
                "exports-loader": "^0.6.3",
                "file-loader": "^0.11.2",
                hanabi: "^0.4.0",
                marked: "^0.4.0",
                "node-sass": "^4.9.2",
                "postcss-loader": "^2.0.5",
                "sass-loader": "^6.0.3",
                "style-loader": "^0.18.2",
                "url-loader": "^0.6.2",
                webpack: "^2.6.1",
                "webpack-cli": "^3.3.5",
                "webpack-dev-server": "^2.9.1"
            }
        }
    }
    , function(e, t) {
        var n;
        n = function() {
            return this
        }();
        try {
            n = n || Function("return this")() || (0,
            eval)("this")
        } catch (e) {
            "object" == typeof window && (n = window)
        }
        e.exports = n
    }
    , function(e, t) {
        function aru(index){
          return "<img id='emoji' src='https://cdn.jsdelivr.net/gh/xaoxuu/volantis@1.0/img/aru/" + index + ".png'>";
        }
        function tieba(str){
          return "<img id='emoji' src='https://cdn.jsdelivr.net/gh/xaoxuu/volantis@1.0/img/tieba/" + str + ".png'>";
        }
        function qq(str) {
          return "<img id='emoji' src='https://cdn.jsdelivr.net/gh/xaoxuu/volantis@1.0/img/qq/" + str + ".gif'>";
        }
        e.exports = {
            aru151: aru(151),
            贴吧what: tieba('what'),
            贴吧乖: tieba('乖'),
            贴吧喷: tieba('喷'),
            贴吧太开心: tieba('太开心'),
            贴吧委屈: tieba('委屈'),
            贴吧小乖: tieba('小乖'),
            贴吧捂嘴笑: tieba('捂嘴笑'),
            贴吧泪: tieba('泪'),
            贴吧滑稽: tieba('滑稽'),
            贴吧爱心: tieba('爱心'),
            贴吧玫瑰: tieba('玫瑰'),
            贴吧真棒: tieba('真棒'),
      			贴吧疑问: tieba('疑问'),
      			qqOK: qq('OK'),
      			qq亲亲: qq('亲亲'),
      			qq便便: qq('便便'),
      			qq偷笑: qq('偷笑'),
      			qq冷汗: qq('冷汗'),
      			qq发呆: qq('发呆'),
      			qq发怒: qq('发怒'),
      			qq可怜: qq('可怜'),
      			qq可爱: qq('可爱'),
      			qq左哼哼: qq('左哼哼'),
      			qq右哼哼: qq('右哼哼'),
      			qq吓: qq('吓'),
      			qq呲牙: qq('呲牙'),
      			qq嗅大了: qq('嗅大了'),
      			qq坏笑: qq('坏笑'),
      			qq奋斗: qq('奋斗'),
      			qq委屈: qq('委屈'),
      			qq害羞: qq('害羞'),
      			qq尴尬: qq('尴尬'),
      			qq强: qq('强'),
      			qq得意: qq('得意'),
      			qq快哭了: qq('快哭了'),
      			qq惊恐: qq('惊恐'),
      			qq憨笑: qq('憨笑'),
      			qq抓狂: qq('抓狂'),
      			qq抱拳: qq('抱拳'),
      			qq握手: qq('握手'),
      			qq晕: qq('晕'),
      			qq疑问: qq('疑问'),
      			qq阴险: qq('阴险'),
      			qq鼓掌: qq('鼓掌'),
            grinning: "😀",
            smiley: "😃",
            smile: "😄",
            grin: "😁",
            laughing: "😆",
            sweat_smile: "😅",
            joy: "😂",
            blush: "😊",
            innocent: "😇",
            wink: "😉",
            relieved: "😌",
            heart_eyes: "😍",
            kissing_heart: "😘",
            kissing: "😗",
            kissing_smiling_eyes: "😙",
            kissing_closed_eyes: "😚",
            yum: "😋",
            stuck_out_tongue_winking_eye: "😜",
            stuck_out_tongue_closed_eyes: "😝",
            stuck_out_tongue: "😛",
            sunglasses: "😎",
            smirk: "😏",
            unamused: "😒",
            disappointed: "😞",
            pensive: "😔",
            worried: "😟",
            confused: "😕",
            persevere: "😣",
            confounded: "😖",
            tired_face: "😫",
            weary: "😩",
            angry: "😠",
            rage: "😡",
            no_mouth: "😶",
            neutral_face: "😐",
            expressionless: "😑",
            hushed: "😯",
            frowning: "😦",
            anguished: "😧",
            open_mouth: "😮",
            astonished: "😲",
            dizzy_face: "😵",
            flushed: "😳",
            scream: "😱",
            fearful: "😨",
            cold_sweat: "😰",
            cry: "😢",
            disappointed_relieved: "😥",
            sob: "😭",
            sweat: "😓",
            sleepy: "😪",
            sleeping: "😴",
            mask: "😷",
            smiling_imp: "😈",
            smiley_cat: "😺",
            smile_cat: "😸",
            joy_cat: "😹",
            heart_eyes_cat: "😻",
            smirk_cat: "😼",
            kissing_cat: "😽",
            scream_cat: "🙀",
            crying_cat_face: "😿",
            pouting_cat: "😾",
            cat: "🐱",
            mouse: "🐭",
            cow: "🐮",
            monkey_face: "🐵",
            hand: "✋",
            fist: "✊",
            v: "✌️",
            point_up: "👆",
            point_down: "👇",
            point_left: "👈",
            point_right: "👉",
            facepunch: "👊",
            wave: "👋",
            clap: "👏",
            open_hands: "👐",
            "+1": "👍",
            "-1": "👎",
            ok_hand: "👌",
            pray: "🙏",
            ear: "👂",
            eyes: "👀",
            nose: "👃",
            lips: "👄",
            tongue: "👅",
            heart: "❤️",
            cupid: "💘",
            sparkling_heart: "💖",
            star: "⭐️",
            sparkles: "✨",
            zap: "⚡️",
            sunny: "☀️",
            cloud: "☁️",
            snowflake: "❄️",
            umbrella: "☔️",
            coffee: "☕️",
            airplane: "✈️",
            anchor: "⚓️",
            watch: "⌚️",
            phone: "☎️",
            hourglass: "⌛️",
            email: "✉️",
            scissors: "✂️",
            black_nib: "✒️",
            pencil2: "✏️",
            x: "❌",
            recycle: "♻️",
            white_check_mark: "✅",
            negative_squared_cross_mark: "❎",
            m: "Ⓜ️",
            i: "ℹ️",
            tm: "™️",
            copyright: "©️",
            registered: "®️"
        }
    }
    , function(e, t, n) {
        var r = n(13);
        "string" == typeof r && (r = [[e.i, r, ""]]);
        var i = {
            transform: void 0
        };
        n(15)(r, i),
        r.locals && (e.exports = r.locals)
    }
    , function(e, t, n) {
        (e.exports = n(14)(!1)).push([e.i, '.v{font-size:16px;text-align:left}.v *{-webkit-box-sizing:border-box;box-sizing:border-box;line-height:2;color:#555;-webkit-transition:all .3s ease;transition:all .3s ease}.v hr{margin:.825em 0;border-color:#f6f6f6;border-style:dashed}.v.hide-avatar .vimg{display:none}.v a{position:relative;cursor:pointer;color:#1abc9c;display:inline-block}.v a:before{content:"";position:absolute;width:0;right:0;bottom:0;height:1px;background:#1abc9c;-webkit-transition:width .3s ease;transition:width .3s ease}.v a:hover{color:#d7191a}.v a:hover:before{width:100%;left:0;right:auto}.v code,.v pre{background-color:#f6f6f6;color:#555;padding:.2em .4em;border-radius:3px;font-size:85%;margin:0;font-family:Source Code Pro,courier new,Input Mono,PT Mono,SFMono-Regular,Consolas,Monaco,Menlo,PingFang SC,Liberation Mono,Microsoft YaHei,Courier，monospace}.v pre{padding:10px;overflow:auto;line-height:1.45}.v pre code{padding:0;background:transparent;white-space:pre-wrap;word-break:keep-all}.v blockquote{color:#666;margin:.5em 0;padding:0 0 0 1em;border-left:8px solid hsla(0,0%,93%,.5)}.v .vinput{border:none;resize:none;outline:none;padding:10px 5px;max-width:100%;font-size:.775em}.v input[type=checkbox],.v input[type=radio]{display:inline-block;vertical-align:middle;margin-top:-2px}.v .vwrap{border:1px solid #f0f0f0;border-radius:4px;margin-bottom:10px;overflow:hidden;position:relative;padding:10px}.v .vwrap input{background:transparent}.v .vwrap .vedit{position:relative;padding-top:10px}.v .vwrap .vedit .vctrl{text-align:right;font-size:12px}.v .vwrap .vedit .vctrl span{padding:10px;display:inline-block;vertical-align:middle;cursor:pointer}.v .vwrap .vedit .vemojis{display:none;font-size:18px;text-align:justify;max-height:145px;overflow:auto;margin-bottom:10px;-webkit-box-shadow:0 0 1px #f0f0f0;box-shadow:0 0 1px #f0f0f0}.v .vwrap .vedit .vemojis i{font-style:normal;padding:7px 0;width:38px;cursor:pointer;text-align:center;display:inline-block;vertical-align:middle}.v .vwrap .vedit .vpreview{padding:7px;-webkit-box-shadow:0 0 1px #f0f0f0;box-shadow:0 0 1px #f0f0f0}.v .vwrap .vedit .vpreview frame,.v .vwrap .vedit .vpreview iframe,.v .vwrap .vedit .vpreview img{max-width:100%;border:none}.v .vwrap .vheader .vinput{width:33.33%;border-bottom:1px dashed #dedede}.v .vwrap .vheader.item2 .vinput{width:50%}.v .vwrap .vheader.item1 .vinput{width:100%}.v .vwrap .vheader .vinput:focus{border-bottom-color:#eb5055}@media screen and (max-width:520px){.v .vwrap .vheader.item2 .vinput,.v .vwrap .vheader .vinput{width:100%}}.v .vwrap .vcontrol{font-size:0;padding-top:15px}.v .vwrap .vcontrol .col{display:inline-block;font-size:16px;vertical-align:middle;color:#ccc}.v .vwrap .vcontrol .col.text-right{text-align:right}.v .vwrap .vcontrol .col svg{margin-right:2px;overflow:hidden;fill:currentColor;vertical-align:middle}.v .vwrap .vcontrol .col.col-20{width:20%}.v .vwrap .vcontrol .col.col-40{width:40%}.v .vwrap .vcontrol .col.col-60{width:60%}.v .vwrap .vcontrol .col.col-80{width:80%}.v .vwrap .vcontrol .col.split{width:50%}.v .vwrap .vmark{position:absolute;background:rgba(0,0,0,.65);width:100%;height:100%;left:0;top:0}.v .vwrap .vmark .valert{padding-top:3em}.v .vwrap .vmark .valert .vtext{color:#fff;padding:1em 0}.v .vwrap .vmark .valert .vcode{width:4.6875em;border-radius:.3125em;padding:.5em;background:#dedede}.v .vwrap .vmark .valert .vcode:focus{border-color:#3090e4;background-color:#fff}@media screen and (max-width:720px){.v .vwrap .vmark .valert{padding-top:5.5em}.v .vwrap .vmark .valert .vtext{color:#fff;padding:1em 0}}.v .power{color:#999;padding:.5em 0}.v .power,.v .power a{font-size:.75em}.v .vinfo{font-size:0;padding:5px}.v .vinfo .col{font-size:16px;display:inline-block;width:50%;vertical-align:middle}.v .vinfo .vcount .vnum{font-weight:600;font-size:1.25em}.v a{text-decoration:none;color:#555}.v a:hover{color:#222}.v ol,.v ul{padding:0;margin-left:1.25em}.v .txt-center{text-align:center}.v .txt-right{text-align:right}.v .pd5{padding:5px}.v .pd10{padding:10px}.v .veditor{width:100%;min-height:8.75em;font-size:.875em;background:transparent;resize:vertical;-webkit-transition:all .25s ease;transition:all .25s ease}.v .vbtn{-webkit-transition-duration:.4s;transition-duration:.4s;text-align:center;color:#313131;border:1px solid #ededed;border-radius:.3em;display:inline-block;background:#ededed;margin-bottom:0;font-weight:400;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;white-space:nowrap;padding:.5em 1.25em;font-size:.875em;line-height:1.42857143;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:none}.v .vbtn+.vbtn{margin-left:1.25em}.v .vbtn:active,.v .vbtn:hover{color:#3090e4;border-color:#3090e4;background-color:#fff}.v .vempty{padding:1.25em;text-align:center;color:#999}.v .vlist{width:100%}.v .vlist .vcard{padding-top:1.5em;position:relative;display:block}.v .vlist .vcard:after{content:"";clear:both;display:block}.v .vlist .vcard .vimg{width:3.125em;height:3.125em;float:left;border-radius:50%;margin-right:.7525em;border:1px solid #f5f5f5;padding:.125em}@media screen and (max-width:720px){.v .vlist .vcard .vimg{width:2.5em;height:2.5em}}.v .vlist .vcard .vhead{line-height:1.5;margin-top:0}.v .vlist .vcard .vhead .vnick{position:relative;font-size:.875em;font-weight:500;margin-right:.875em;cursor:pointer;color:#1abc9c;text-decoration:none;display:inline-block}.v .vlist .vcard .vhead .vnick:before{content:"";position:absolute;width:0;right:0;bottom:0;height:1px;background:#1abc9c;-webkit-transition:width .3s ease;transition:width .3s ease}.v .vlist .vcard .vhead .vnick:hover{color:#d7191a}.v .vlist .vcard .vhead .vnick:hover:before{width:100%;left:0;right:auto}.v .vlist .vcard .vhead .vsys{display:inline-block;padding:.2em .5em;background:#ededed;color:#b3b1b1;font-size:.75em;border-radius:.2em;margin-right:.3em}@media screen and (max-width:520px){.v .vlist .vcard .vhead .vsys{display:none}}.v .vlist .vcard .vh{overflow:hidden;padding-bottom:.5em;border-bottom:1px dashed #f5f5f5}.v .vlist .vcard .vh .vtime{color:#b3b3b3;font-size:.75em;margin-right:.875em}.v .vlist .vcard .vh .vmeta{line-height:1;position:relative}.v .vlist .vcard .vh .vmeta .vat{font-size:.8125em;color:#ef2f11;cursor:pointer;float:right}.v .vlist .vcard:last-child .vh{border-bottom:none}.v .vlist .vcard .vcontent{word-wrap:break-word;word-break:break-all;text-align:justify;color:#4a4a4a;font-size:.875em;line-height:2;position:relative;margin-bottom:.75em;padding-top:.625em}.v .vlist .vcard .vcontent frame,.v .vlist .vcard .vcontent iframe,.v .vlist .vcard .vcontent img{max-width:100%;border:none}.v .vlist .vcard .vcontent.expand{cursor:pointer;max-height:11.25em;overflow:hidden}.v .vlist .vcard .vcontent.expand:before{display:block;content:"";position:absolute;width:100%;left:0;top:0;bottom:3.15em;pointer-events:none;background:-webkit-gradient(linear,left top,left bottom,from(hsla(0,0%,100%,0)),to(hsla(0,0%,100%,.9)));background:linear-gradient(180deg,hsla(0,0%,100%,0),hsla(0,0%,100%,.9))}.v .vlist .vcard .vcontent.expand:after{display:block;content:"Click on expand";text-align:center;color:#828586;position:absolute;width:100%;height:3.15em;line-height:3.15em;left:0;bottom:0;pointer-events:none;background:hsla(0,0%,100%,.9)}.v .vlist .vcard .vquote{color:#666;margin-top:1em;padding-left:1em;border-left:1px dashed hsla(0,0%,93%,.5)}.v .vlist .vcard .vquote .vimg{width:2.225em;height:2.225em}.v .vpage .vmore{margin:1em 0}.v .clear{content:"";display:block;clear:both}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes pulse{50%{background:#dcdcdc}}@keyframes pulse{50%{background:#dcdcdc}}.v .vloading{position:relative;padding:20px;display:block;height:80px}.v .vloading:before{-webkit-box-sizing:border-box;box-sizing:border-box;content:"";position:absolute;display:inline-block;top:20px;left:50%;margin-left:-20px;width:40px;height:40px;border:6px double #a0a0a0;border-top-color:transparent;border-bottom-color:transparent;border-radius:50%;-webkit-animation:spin 1s infinite linear;animation:spin 1s infinite linear}', ""])
    }
    , function(e, t) {
        function n(e, t) {
            var n = e[1] || ""
              , r = e[3];
            if (!r)
                return n;
            if (t && "function" == typeof btoa) {
                var i = function(e) {
                    return "/*# sourceMappingURL=data:application/json;charset=utf-8;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(e)))) + " */"
                }(r);
                return [n].concat(r.sources.map(function(e) {
                    return "/*# sourceURL=" + r.sourceRoot + e + " */"
                })).concat([i]).join("\n")
            }
            return [n].join("\n")
        }
        e.exports = function(e) {
            var t = [];
            return t.toString = function() {
                return this.map(function(t) {
                    var r = n(t, e);
                    return t[2] ? "@media " + t[2] + "{" + r + "}" : r
                }).join("")
            }
            ,
            t.i = function(e, n) {
                "string" == typeof e && (e = [[null, e, ""]]);
                for (var r = {}, i = 0; i < this.length; i++) {
                    var o = this[i][0];
                    "number" == typeof o && (r[o] = !0)
                }
                for (i = 0; i < e.length; i++) {
                    var a = e[i];
                    "number" == typeof a[0] && r[a[0]] || (n && !a[2] ? a[2] = n : n && (a[2] = "(" + a[2] + ") and (" + n + ")"),
                    t.push(a))
                }
            }
            ,
            t
        }
    }
    , function(e, t, n) {
        function r(e, t) {
            for (var n = 0; n < e.length; n++) {
                var r = e[n]
                  , i = p[r.id];
                if (i) {
                    i.refs++;
                    for (var o = 0; o < i.parts.length; o++)
                        i.parts[o](r.parts[o]);
                    for (; o < r.parts.length; o++)
                        i.parts.push(d(r.parts[o], t))
                } else {
                    var a = [];
                    for (o = 0; o < r.parts.length; o++)
                        a.push(d(r.parts[o], t));
                    p[r.id] = {
                        id: r.id,
                        refs: 1,
                        parts: a
                    }
                }
            }
        }
        function i(e, t) {
            for (var n = [], r = {}, i = 0; i < e.length; i++) {
                var o = e[i]
                  , a = t.base ? o[0] + t.base : o[0]
                  , s = {
                    css: o[1],
                    media: o[2],
                    sourceMap: o[3]
                };
                r[a] ? r[a].parts.push(s) : n.push(r[a] = {
                    id: a,
                    parts: [s]
                })
            }
            return n
        }
        function o(e, t) {
            var n = h(e.insertInto);
            if (!n)
                throw new Error("Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.");
            var r = m[m.length - 1];
            if ("top" === e.insertAt)
                r ? r.nextSibling ? n.insertBefore(t, r.nextSibling) : n.appendChild(t) : n.insertBefore(t, n.firstChild),
                m.push(t);
            else {
                if ("bottom" !== e.insertAt)
                    throw new Error("Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.");
                n.appendChild(t)
            }
        }
        function a(e) {
            if (null === e.parentNode)
                return !1;
            e.parentNode.removeChild(e);
            var t = m.indexOf(e);
            t >= 0 && m.splice(t, 1)
        }
        function s(e) {
            var t = document.createElement("style");
            return e.attrs.type = "text/css",
            c(t, e.attrs),
            o(e, t),
            t
        }
        function l(e) {
            var t = document.createElement("link");
            return e.attrs.type = "text/css",
            e.attrs.rel = "stylesheet",
            c(t, e.attrs),
            o(e, t),
            t
        }
        function c(e, t) {
            Object.keys(t).forEach(function(n) {
                e.setAttribute(n, t[n])
            })
        }
        function d(e, t) {
            var n, r, i, o;
            if (t.transform && e.css) {
                if (!(o = t.transform(e.css)))
                    return function() {}
                    ;
                e.css = o
            }
            if (t.singleton) {
                var c = g++;
                n = v || (v = s(t)),
                r = u.bind(null, n, c, !1),
                i = u.bind(null, n, c, !0)
            } else
                e.sourceMap && "function" == typeof URL && "function" == typeof URL.createObjectURL && "function" == typeof URL.revokeObjectURL && "function" == typeof Blob && "function" == typeof btoa ? (n = l(t),
                r = function(e, t, n) {
                    var r = n.css
                      , i = n.sourceMap
                      , o = void 0 === t.convertToAbsoluteUrls && i;
                    (t.convertToAbsoluteUrls || o) && (r = b(r)),
                    i && (r += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(i)))) + " */");
                    var a = new Blob([r],{
                        type: "text/css"
                    })
                      , s = e.href;
                    e.href = URL.createObjectURL(a),
                    s && URL.revokeObjectURL(s)
                }
                .bind(null, n, t),
                i = function() {
                    a(n),
                    n.href && URL.revokeObjectURL(n.href)
                }
                ) : (n = s(t),
                r = function(e, t) {
                    var n = t.css
                      , r = t.media;
                    if (r && e.setAttribute("media", r),
                    e.styleSheet)
                        e.styleSheet.cssText = n;
                    else {
                        for (; e.firstChild; )
                            e.removeChild(e.firstChild);
                        e.appendChild(document.createTextNode(n))
                    }
                }
                .bind(null, n),
                i = function() {
                    a(n)
                }
                );
            return r(e),
            function(t) {
                if (t) {
                    if (t.css === e.css && t.media === e.media && t.sourceMap === e.sourceMap)
                        return;
                    r(e = t)
                } else
                    i()
            }
        }
        function u(e, t, n, r) {
            var i = n ? "" : r.css;
            if (e.styleSheet)
                e.styleSheet.cssText = x(t, i);
            else {
                var o = document.createTextNode(i)
                  , a = e.childNodes;
                a[t] && e.removeChild(a[t]),
                a.length ? e.insertBefore(o, a[t]) : e.appendChild(o)
            }
        }
        var p = {}
          , f = function(e) {
            var t;
            return function() {
                return void 0 === t && (t = function() {
                    return window && document && document.all && !window.atob
                }
                .apply(this, arguments)),
                t
            }
        }()
          , h = function(e) {
            var t = {};
            return function(e) {
                return void 0 === t[e] && (t[e] = function(e) {
                    return document.querySelector(e)
                }
                .call(this, e)),
                t[e]
            }
        }()
          , v = null
          , g = 0
          , m = []
          , b = n(16);
        e.exports = function(e, t) {
            if ("undefined" != typeof DEBUG && DEBUG && "object" != typeof document)
                throw new Error("The style-loader cannot be used in a non-browser environment");
            (t = t || {}).attrs = "object" == typeof t.attrs ? t.attrs : {},
            t.singleton || (t.singleton = f()),
            t.insertInto || (t.insertInto = "head"),
            t.insertAt || (t.insertAt = "bottom");
            var n = i(e, t);
            return r(n, t),
            function(e) {
                for (var o = [], a = 0; a < n.length; a++) {
                    var s = n[a];
                    (l = p[s.id]).refs--,
                    o.push(l)
                }
                e && r(i(e, t), t);
                for (a = 0; a < o.length; a++) {
                    var l;
                    if (0 === (l = o[a]).refs) {
                        for (var c = 0; c < l.parts.length; c++)
                            l.parts[c]();
                        delete p[l.id]
                    }
                }
            }
        }
        ;
        var x = function() {
            var e = [];
            return function(t, n) {
                return e[t] = n,
                e.filter(Boolean).join("\n")
            }
        }()
    }
    , function(e, t) {
        e.exports = function(e) {
            var t = "undefined" != typeof window && window.location;
            if (!t)
                throw new Error("fixUrls requires window.location");
            if (!e || "string" != typeof e)
                return e;
            var n = t.protocol + "//" + t.host
              , r = n + t.pathname.replace(/\/[^\/]*$/, "/");
            return e.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi, function(e, t) {
                var i, o = t.trim().replace(/^"(.*)"$/, function(e, t) {
                    return t
                }).replace(/^'(.*)'$/, function(e, t) {
                    return t
                });
                return /^(#|data:|http:\/\/|https:\/\/|file:\/\/\/)/i.test(o) ? e : (i = 0 === o.indexOf("//") ? o : 0 === o.indexOf("/") ? n + o : r + o.replace(/^\.\//, ""),
                "url(" + JSON.stringify(i) + ")")
            })
        }
    }
    , function(e, t, n) {
        n(12),
        e.exports = n(1)
    }
    ])
});
